Главная страница
    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.037 c
4-1086095708
Long
2004-06-01 17:15
2004.07.11
Как послать WM_SYSCOMMAND,SC_RESTORE окну, которое


14-1087541950
Andryk
2004-06-18 10:59
2004.07.11
Однако как меня вчерась хорваты порадовали.


14-1087498130
Djon007
2004-06-17 22:48
2004.07.11
Кто нибуть знает где скачать Delphi 3 или 4?????


14-1087581793
Daniel_
2004-06-18 22:03
2004.07.11
Кто знает, на "Королевстве" долго вопросы обрабатываются?


1-1088071668
Aleksandr.
2004-06-24 14:07
2004.07.11
Как определить, является файл бинарным или текстовым?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский