Форум: "Media";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизКак вырезать звуковой фрагмент из WAV потока? Найти похожие ветки
← →
D. Andrew (2004-04-23 09:30) [0]Мастера! Подскажите! Как извлечь из wav потока (wav stream) необходимый фрагмент?
Задача:
Создан wav поток и в него занесена некая звуковая информация, например слова. Необходимо выделить фрагмент данных wav потока (например, вырезать необходимую звуковую информацию (нужное слово) из общей).
Как вырезать любой звуковой фрагмент из большого файла/потока формата MP3 либо WAV? Пожалуйста, практический пример! Спасибо!
← →
uny (2004-04-23 09:56) [1]если из файла wav - взять формат wav файла, почитать. там заголовок+данные. отсчитываешь сколько надо от начала и извлекаешь
← →
D. Andrew (2004-04-23 10:05) [2]Спасибо!
Но, можно хотя бы маленький пример!
Вот формат, конкретно, применяемый мною:
type
WAVHDR = packed record
Riff : array[0..3] of Char;
Len : DWord;
cWavFmt : array[0..7] of Char;
dwHdrLen : DWord;
wFormat : Word;
wNumChannels : Word;
dwSampleRate : DWord;
dwBytesPerSec : DWord;
wBlockAlign : Word;
wBitsPerSample : Word;
cData : array[0..3] of Char;
dwDataLen : DWord;
end;
Еще раз спасибо за помощь и практический пример!
← →
uny (2004-04-23 11:48) [3]делать было нечего, я вручную узнавал формат wav, может быть не верно:)
и давно это было:)
открывает wav файл, достаёт смещение заголовка и размер вроде
function openwave(df:string; var ofs:integer; var hh:integer):boolean;
type
twave = packed record
riff:longword; //riff = 0x46464952
len:integer; //длина файла - 8
wave:longword; //wave = 0x45564157
fmt:longword; //fmt = 0x20746D66
lenkus:longword; //длина этого куска wav - файла
typewav:word;//тип звуковых данных (1 просто, 0x101 - IBM mu-law, 0x102 - IBM a-law; 0x103 - ADPCM.
channels:word;//число каналов 1/2
SamplesPerSec:longword; //частота выборки
AvgBytesPerSec:longword;//частота выдачи байтов
align:word; //выравнивание
bits:word; //число бит на выборку
end;
var deda:twave;
s:tsearchrec;
b,i:integer; buba:char; bu:longword;
label 100;
begin
if df="" then begin result:=false; goto 100; end;
if findfirst(df,faanyfile,s)<>0 then begin result:=false; goto 100; end;
b:=fileopen(df,fmopenread);
if b<0 then begin result:=false; goto 100; end;
fileread(b,deda,sizeof(deda));
ofs:=sizeof(deda);
if deda.riff<>$46464952 then begin result:=false; goto 100; end;
if deda.wave<>$45564157 then begin result:=false; goto 100; end;
if deda.fmt<>$20746D66 then begin result:=false; goto 100; end;
if s.Size<>deda.len+8 then begin result:=false; goto 100; end;
for i:=1 to deda.lenkus-16 do begin fileread(b,buba,1); ofs:=ofs+1; end;
fileread(b,bu,4); ofs:=ofs+4;
if bu<>$61746164 then begin result:=false; goto 100; end;
fileread(b,bu,4); //длительность
ofs:=ofs+4;
//упаковка = левый правый, 1 2
hh:=bu div 2;
fileclose(b);
findclose(s);
result:=true;
100:
end;
← →
D.Andrew (2004-04-23 13:21) [4]function openwave(df:string; var ofs:integer; var hh:integer):boolean;
А что означают параметры df:string; var ofs:integer; var hh:integer?
Можно пример практического использования функции?
Если df - это имя файла, то у меня проблема именно из потока (WaveStream) извлечь фрагмент. Можно эту функцию как-то модифицировать под данную задачу (под поток)?
Спасибо!
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c