Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

!Wave файлы!....


maker ©   (2002-11-25 18:55:00) 

Мастера подскажите пожалуйста как прочитать именно волну 16-ти битного Wave файла (stereo или mono). Вообще как это происходит и какие это данные (DWord, SmallInt или др.) Самое главное как их прочитать. (Желательно примерчик)


popury   (2003-04-29 13:02:00) [1]

Вообще-то я откопал хороший кусок исходников, который решает проблему записи wav-файла:

http://www.gnomehome.demon.nl/uddf/pages/sound.htm#sound0

Я внес изменения (старое закомментировано):

// Function SetupRecord(P : PWaveRecorder) : Boolean;
Function SetupRecord : Boolean;

iErr := waveInOpen(
( @BufferDoneCallBack)

Вообще-то я откопал хороший кусок исходников, который решает проблему записи wav-файла:

http://www.gnomehome.demon.nl/uddf/pages/sound.htm#sound0

Я внес изменения (старое закомментировано):

// Function SetupRecord(P : PWaveRecorder) : Boolean;
Function SetupRecord : Boolean;

iErr := waveInOpen(
@WaveIn
, WAVE_MAPPER
, pWaveFmtEx
, Integer(@BufferDoneCallBack)
// , Integer(P)
, Integer(Self)
, CALLBACK_FUNCTION + WAVE_ALLOWSYNC
);

//WaveRecorder.SetupRecord(@WaveRecorder);
WaveRecorder.SetupRecord;


Roman Go   (2003-02-17 16:21:00) [2]

Maker, Popury киньте мне тоже информацию на ящик по данному вопросу, кусочек кода, конечно если можно хотелось бы больше всего.


maker   (2003-02-07 15:21:00) [3]

SibMonk (07.02.03 10:24)-->
Этот вопрос я тоже щас изучаю. Имеются исходники MP3 декодера (аж 2), да вот они на "Си", в котором, к сожалению, я ничего не понимаю :(


SibMonk   (2003-02-07 10:24:00) [4]

А если нужно то-же самое сделать с mp3 файлом??? И хотелось бы прямо в процессе воспроизведения...


maker   (2003-01-25 17:42:00) [5]

О всё получилось, спасибо всем, особенно Popury... :)


Popury   (2003-01-23 09:38:00) [6]

Я же кинул информацию на maker@stsland.ru еще 21.01 !


maker   (2003-01-20 13:11:00) [7]

всёравно торможу, кинте чтоль кусочек кода, а то у меня такое получается... (вот досада..)


Popury   (2003-01-20 11:22:00) [8]

Во-первых, надо не word, а Smallint. Word - это 0..65525, а Smallint - -32768..32767.
Во-вторых, запись нужно определить таки с чередованием левого и правого каналов:

TWaveRec=record
LeftCh: Smallint;
RightCh: Smallint;
end;

Проще всего завести 2 переменные, скажем L, R: Integer (или Int64, если надо). Далее, после чтения одного отсчета, а это будет 4 байта, выполнить преобразование Smallint в Integer(Int64) обыкновеннейшим присвоением:

L:=bw.LeftCh; R:= bw.RightCh;

потом делать свои черные дела, используя L и R.


Roman Go   (2002-12-07 09:43:00) [9]

Мне по-моемому нужно что-то подобное, мне надо составить функциональную зависимость сигнала, который записан wav, и записать это в массив чисел только я совсем не знаю как это делать, не можете ли подробненько разъяснить, как взять таки цифры из вав, как это ползти по файлу в делфийском коде то будет

з.с. только сильно не пинайте, программист из меня как из некоторых балерина


Ketmar   (2002-12-03 21:29:00) [10]

а вот не надо массивов делать. данные идут так:
do
readword(left);
( right)

а вот не надо массивов делать. данные идут так:
do
readword(left);
readword(right);
loop


Satanas Nobiscum! 03-Dec-XXXVII A.S.


maker   (2002-12-03 20:52:00) [11]

^
Плизз!...


maker   (2002-11-30 09:53:00) [12]

У меня ещё вопрос, как эти данные получать в цифровом виде, еу типа LeftCh[x]=652, RightCh[x]=7862 и тд. До отправки на звуковуху мне необходимо отрисовать волну файла (WinAMP, CoolEdit Pro и т.д.) но с 16 дитными у мя чудеса получаются....(хе-х)

Вот код которым я пытаюсь это стделать:

type
TWaveRec=record
LeftCh:array [1..1024] of word;
RightCh:array [1..1024] of word;
end;
...
var
bw:TWaveRec;
begin
TFileStream.Create(FileName,$0000);
...
wFile.Position:=dwDataEnd; //Выясненный конец data
wFile.Read(bw,SizeOf(bw)); // читаю в буфер (bw=record)
...
16:
begin
for i:=1 to 1024 do
Canvas.LineTo(i,int64(bw.LeftCh[i])); //???
( shr x)

У меня ещё вопрос, как эти данные получать в цифровом виде, еу типа LeftCh[x]=652, RightCh[x]=7862 и тд. До отправки на звуковуху мне необходимо отрисовать волну файла (WinAMP, CoolEdit Pro и т.д.) но с 16 дитными у мя чудеса получаются....(хе-х)

Вот код которым я пытаюсь это стделать:

type
TWaveRec=record
LeftCh:array [1..1024] of word;
RightCh:array [1..1024] of word;
end;
...
var
bw:TWaveRec;
begin
TFileStream.Create(FileName,$0000);
...
wFile.Position:=dwDataEnd; //Выясненный конец data
wFile.Read(bw,SizeOf(bw)); // читаю в буфер (bw=record)
...
16:
begin
for i:=1 to 1024 do
Canvas.LineTo(i,int64(bw.LeftCh[i])); //???
//??? значение должно быть 0..255(shr x)
end;

Какие у меня ошибки?!..


maker   (2002-11-29 23:07:00) [13]

Спасибо, это очень помогло.


trotski   (2002-11-29 21:50:00) [14]

А кто тебе мешает сделать так :
type
TWaveRec=record
LeftCh:word;
RightCh:word;
end;
var
( WaveFile,bw,sizeof(bw)

А кто тебе мешает сделать так :
type
TWaveRec=record
LeftCh:word;
RightCh:word;
end;
var
bw:TWaveRec;
.....
Read(WaveFile,bw,sizeof(bw));

Или что-то похожее. А насчет максимальной амплитуды, то ты прав, это 2 в степени Количество_бит-1


maker   (2002-11-29 20:54:00) [15]

с 8-битным форматом понятно, там нужно читать (байт, байт, байт, байт...), а вот проблема с 16 битным, по моему пониманю там нужно читать (2байта, 2байта...) а потом из 2Байта получать значение от –32768 до 32767, а как его получить я незнаю... (хе-х)...


trotski   (2002-11-29 06:40:00) [16]

Ползешь по Wave файлу до того момента, как не наткнешься на слово data, а потом пойдут отсчеты амплитуды. В зависимости от того, каков формат файла, на каждый отсчет времени будет разный размер ( стерео/моно, 8/16 бит ) А вообще почитай о структуре PCM формата.


maker   (2002-11-27 13:11:00) [17]

А как эти данные получать, задача в том, что необходимо кусок wav файла(PCM) на bitmap, как получит цифры(o),?

//PS: Ля-ля-ля жу-жу-жу я сегодня торможу....


apay   (2002-11-26 01:05:00) [18]

если PCM, то после заголовка 44 байт идут данные по слову на сэмпл (по два сова для stereo). подробнее см.: http://www.graphicon.ru:8105/courses/cg02b/assigns/hw-2/help/wavfmt2.htm
или задай поиск


Наверх

Титульная страница Поиск, карта сайта Написать письмо