Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.031 c
3-1086854322
r9000
2004-06-10 11:58
2004.07.11
Зависание программы при редактировании таблицы базы


1-1088292852
Suomi
2004-06-27 03:34
2004.07.11
Инсталляция компонентов


14-1087725264
Igor_thief
2004-06-20 13:54
2004.07.11
GradientFill


8-1082635528
vin
2004-04-22 16:05
2004.07.11
TImage с быстрым Zoom и Pan


14-1087870401
Думкин
2004-06-22 06:13
2004.07.11
С днем рождения! 22 июня





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский