Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Можно ли изменять скорость воспроизведения wav файла?   Найти похожие ветки 

 
Черя   (2004-04-30 11:03) [0]

Можно ли изменять скорость воспроизведения wav файла? Ускорять, замедлять.


 
Evgeny V ©   (2004-04-30 12:11) [1]

Измени nSamplesPerSec,nAvgBytesPerSec в заголовке wav файла или в структуре передаваемой waveOutOpen(параметр pwfx).


 
Черя   (2004-04-30 12:53) [2]

А как это сделать? С первым вариантом, я воще не понял- мне его перезаписывать прийдется каждый раз? А со вторым: У меня wav проигрывается с помощью MediaPlayer1 (тоесть руками я его не гружу в опиративу). Как быть? Файл весит 3Мб. Мне воще-то всё равно каким способом, можно ли по подробнее, примерчики какие-то.
Пасиб.


 
Evgeny V ©   (2004-04-30 14:09) [3]

С первым вариантом - не весь файл перезаписывать, а только указынные параметры в заголовке, для PCM формата это просто, и это 4 байта на каждый параметр, так что менять не много, но некрасиво. А вот как самому в памяти - это вариант два, считать буфер данных,открыть устройство на воспроизведение,  поставить указанные параметры в нужные значения. Читай функции waveOut....  . MediaPlayer в этом случае не поможет. Есть более сложный вариант, растянуть или сжать данные. Сжать - выкинуть через сэмпл значения например - это просто, а вот растянуть сложнее, надо вставить новые сэмплы между каждой парой сэмплов(через сколько вставлять и или убирать выбирать тебе), но не пустые а интерполированные, можно для этого использовать НЧ фильтр. Или поискать готовые компоненты.


 
Черя   (2004-04-30 14:43) [4]

"С первым вариантом - не весь файл перезаписывать..."
А можно по подробнее? Есть файл wav. Воиспровожу элементарно MediaPlayer1.Play. Но как мне в него передать параметры? И какие именно? - Это ж файл все-таки. Я чайник в этом, можна какой-то пример?


 
konstantinov ©   (2004-05-01 00:35) [5]

procedure SetSampleRate( const FileName : string; SampleRate : LonigInt );
var f : file of byte;
begin
 AssignFile(f,FileNAme);
 Seek(20);//могу ошибиться
 Reset(f);
 BlockWrite(SampleRate, SizeOf(integer));
 CloseFile(f);
end;

наверное очень грубо и невежественно, но думаю должно работать.


 
Twinge ©   (2004-05-01 08:11) [6]

Специально для этогоесть bass.dll, используемый во многих демках и freeware играх.


 
nikus ©   (2004-05-01 14:48) [7]

waveOutSetPitch - можешь менять прямо в процессе проигрывания на любую желаемую величину.

Опять же нужно проигрывать через waveOutOpen/waveOutWrite... как у Evgeny V. Считывать wav-файл (заголовок и данные) лучше всего с помощью функций mmioOpen/mmioRead...

Вариант не из лёгких, но, если пишешь более-менее профессиональную программу, лучший.



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
3-1087545317
Ditrix
2004-06-18 11:55
2004.07.18
параметры страницы для PrintDBGridEh


1-1089022563
Anton.
2004-07-05 14:16
2004.07.18
DRAG&Dock


1-1088678430
Akella
2004-07-01 14:40
2004.07.18
Обработка событий различных объектов одной процедурой


1-1089179521
Beton
2004-07-07 09:52
2004.07.18
Повторный запуск приложения


4-1086362391
Elf
2004-06-04 19:19
2004.07.18
Вывод в видеопамять