Форум: "Media";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];
Вниз!Wave файлы!.... Найти похожие ветки
← →
maker (2002-11-25 18:55) [0]Мастера подскажите пожалуйста как прочитать именно волну 16-ти битного Wave файла (stereo или mono). Вообще как это происходит и какие это данные (DWord, SmallInt или др.) Самое главное как их прочитать. (Желательно примерчик)
← →
apay (2002-11-26 01:05) [1]если PCM, то после заголовка 44 байт идут данные по слову на сэмпл (по два сова для stereo). подробнее см.: http://www.graphicon.ru:8105/courses/cg02b/assigns/hw-2/help/wavfmt2.htm
или задай поиск
← →
maker (2002-11-27 13:11) [2]А как эти данные получать, задача в том, что необходимо кусок wav файла(PCM) на bitmap, как получит цифры(o),?
//PS: Ля-ля-ля жу-жу-жу я сегодня торможу....
← →
trotski (2002-11-29 06:40) [3]Ползешь по Wave файлу до того момента, как не наткнешься на слово data, а потом пойдут отсчеты амплитуды. В зависимости от того, каков формат файла, на каждый отсчет времени будет разный размер ( стерео/моно, 8/16 бит ) А вообще почитай о структуре PCM формата.
← →
maker (2002-11-29 20:54) [4]с 8-битным форматом понятно, там нужно читать (байт, байт, байт, байт...), а вот проблема с 16 битным, по моему пониманю там нужно читать (2байта, 2байта...) а потом из 2Байта получать значение от –32768 до 32767, а как его получить я незнаю... (хе-х)...
← →
trotski (2002-11-29 21:50) [5]А кто тебе мешает сделать так :
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 23:07) [6]Спасибо, это очень помогло.
← →
maker (2002-11-30 09:53) [7]У меня ещё вопрос, как эти данные получать в цифровом виде, еу типа 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-12-03 20:52) [8]^
Плизз!...
← →
Ketmar (2002-12-03 21:29) [9]а вот не надо массивов делать. данные идут так:
do
readword(left);
( right)а вот не надо массивов делать. данные идут так:
do
readword(left);
readword(right);
loop
Satanas Nobiscum! 03-Dec-XXXVII A.S.
← →
Roman Go (2002-12-07 09:43) [10]Мне по-моемому нужно что-то подобное, мне надо составить функциональную зависимость сигнала, который записан wav, и записать это в массив чисел только я совсем не знаю как это делать, не можете ли подробненько разъяснить, как взять таки цифры из вав, как это ползти по файлу в делфийском коде то будет
з.с. только сильно не пинайте, программист из меня как из некоторых балерина
← →
Popury (2003-01-20 11:22) [11]Во-первых, надо не 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.
← →
maker (2003-01-20 13:11) [12]всёравно торможу, кинте чтоль кусочек кода, а то у меня такое получается... (вот досада..)
← →
Popury (2003-01-23 09:38) [13]Я же кинул информацию на maker@stsland.ru еще 21.01 !
← →
maker (2003-01-25 17:42) [14]О всё получилось, спасибо всем, особенно Popury... :)
← →
SibMonk (2003-02-07 10:24) [15]А если нужно то-же самое сделать с mp3 файлом??? И хотелось бы прямо в процессе воспроизведения...
← →
maker (2003-02-07 15:21) [16]SibMonk (07.02.03 10:24) -->
Этот вопрос я тоже щас изучаю. Имеются исходники MP3 декодера (аж 2), да вот они на "Си", в котором, к сожалению, я ничего не понимаю :(
← →
Roman Go (2003-02-17 16:21) [17]Maker, Popury киньте мне тоже информацию на ящик по данному вопросу, кусочек кода, конечно если можно хотелось бы больше всего.
← →
popury (2003-04-29 13:02) [18]Вообще-то я откопал хороший кусок исходников, который решает проблему записи 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;
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c