![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли изменять скорость воспроизведения wav файла? [D5, Win2k]
Черя © (2004-04-30 11:03:00)Можно ли изменять скорость воспроизведения wav файла? Ускорять, замедлять.
nikus (2004-05-01 14:48:00) [1]waveOutSetPitch - можешь менять прямо в процессе проигрывания на любую желаемую величину.
Опять же нужно проигрывать через waveOutOpen/waveOutWrite... как у Evgeny V. Считывать wav-файл (заголовок и данные) лучше всего с помощью функций mmioOpen/mmioRead...
Вариант не из лёгких, но, если пишешь более-менее профессиональную программу, лучший.
Twinge (2004-05-01 08:11:00) [2]Специально для этогоесть bass.dll, используемый во многих демках и freeware играх.
konstantinov (2004-05-01 00:35:00) [3]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;
наверное очень грубо и невежественно, но думаю должно работать.
Черя (2004-04-30 14:43:00) [4]"С первым вариантом - не весь файл перезаписывать..."
А можно по подробнее? Есть файл wav. Воиспровожу элементарно MediaPlayer1.Play. Но как мне в него передать параметры? И какие именно? - Это ж файл все-таки. Я чайник в этом, можна какой-то пример?
Evgeny V (2004-04-30 14:09:00) [5]С первым вариантом - не весь файл перезаписывать, а только указынные параметры в заголовке, для PCM формата это просто, и это 4 байта на каждый параметр, так что менять не много, но некрасиво. А вот как самому в памяти - это вариант два, считать буфер данных,открыть устройство на воспроизведение, поставить указанные параметры в нужные значения. Читай функции waveOut.... . MediaPlayer в этом случае не поможет. Есть более сложный вариант, растянуть или сжать данные. Сжать - выкинуть через сэмпл значения например - это просто, а вот растянуть сложнее, надо вставить новые сэмплы между каждой парой сэмплов(через сколько вставлять и или убирать выбирать тебе), но не пустые а интерполированные, можно для этого использовать НЧ фильтр. Или поискать готовые компоненты.
Черя (2004-04-30 12:53:00) [6]А как это сделать? С первым вариантом, я воще не понял- мне его перезаписывать прийдется каждый раз? А со вторым: У меня wav проигрывается с помощью MediaPlayer1 (тоесть руками я его не гружу в опиративу). Как быть? Файл весит 3Мб. Мне воще-то всё равно каким способом, можно ли по подробнее, примерчики какие-то.
Пасиб.
Evgeny V (2004-04-30 12:11:00) [7]Измени nSamplesPerSec,nAvgBytesPerSec в заголовке wav файла или в структуре передаваемой waveOutOpen(параметр pwfx).