Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Проигрыватель WAV на быструю руку


Автор: GuManOiD 24.1.2007, 19:24
В общем, есть WAV файл в памяти, нужно написать простейший плеер, выполняющий воспроизведение, остановку, смену позиции в треке (TrackBar в общем smile) этого WAV файла.
PlaySound, ясень пень, не подходит так как нельзя сделать "перемотку" smile
Посоветуйте как это реализовать, просто нужна информация с чего начать поиски.

Критерии: минимум временных затрат smile

Автор: Alexeis 25.1.2007, 16:58
GuManOiD, Есть набор функций WaveOut*** и mmio***, при помощи которых можно это сделать. Я бы помог, но сейчас не успеваю smile потому пошлю в фак
http://vingrad.ru/DELPHI-DLP-001516
http://vingrad.ru/DELPHI-DLP-001515
там еще есть пару тем, которые можно почитать.

Автор: GuManOiD 25.1.2007, 17:32
Цитата(Alexeis @  25.1.2007,  16:58 Найти цитируемый пост)
Есть набор функций WaveOut*** и mmio***


Про waveOut читал в Delphi Windows SDK, не нашел как изменять позицию с которой воспроизводить...

А те статьи что ты мне дал, мало к делу относятся smile

Добавлено @ 17:33 
А вот на счет mmio функций спасибо, сейчас там копаю...  smile 

Автор: Alexeis 25.1.2007, 17:36
Цитата(GuManOiD @  25.1.2007,  17:32 Найти цитируемый пост)
не нашел как изменять позицию с которой воспроизводить...

  Быть такого не может. Во всяком случае позицию в текущем буфере определить можно.

Добавлено @ 17:37 
Цитата

The waveOutGetPosition function retrieves the current playback position of the given waveform-audio output device

Автор: GuManOiD 25.1.2007, 17:53
Ну так, мне нужно ее изменять smile

Проблема в том, что когда некая последовательность байт загружена в MemoryStream, она еще не представляет собой WAV файл, а только после некоторых модификаций, она принимает форму WAVE (это я и имел ввиду под WAV в памяти), и мне нужно проиграть (в том числе + возможность "перемотки") результат модификаций. 
Но я не смог найти ничего кроме PlaySound, что бы проиграть WAV из памяти.
Если это единственная возможность реализовать задумку, то существует ли способ как то вытащить из PlaySound DeviceID для дальнейших манипуляций MCI smile

Добавлено @ 18:05 
Или компонент чтоль какой посоветуйте, главная фишка чтоб из памяти воспроизводил и "перемотка" была smile

Автор: Alexeis 25.1.2007, 18:17
GuManOiD, так в чем проблема? Нужно остановить текущее проигрывание и переместить указатель на аудио данные в новую позицию в буфере и передать этот буфер на проигрывание.

Добавлено @ 18:22 
Цитата(GuManOiD @  25.1.2007,  17:53 Найти цитируемый пост)
Или компонент чтоль какой посоветуйте, главная фишка чтоб из памяти воспроизводил и "перемотка" была

  Попробуй на torry.net там я точно находил нечто похожее, но не факт что было из памяти (возможно прийдется доработать чуток)

Автор: GuManOiD 25.1.2007, 18:48
Цитата(Alexeis @  25.1.2007,  18:17 Найти цитируемый пост)
Нужно остановить текущее проигрывание и переместить указатель на аудио данные в новую позицию в буфере и передать этот буфер на проигрывание.


А можно кода кусок smile 

Мне начинает казаться что я вообще не понял принципа функционирования Multimedia API Windows smile

Автор: Alexeis 25.1.2007, 19:11
GuManOiD, вообще современные программы, такие как винамп, никогда не загружают в буфер весь трек, так как это довольно долго. Они загружают фрагментами по 20-50кб. Во первых нет большой разовой нагрузки ни на проц ни не винт, во вторых чтение с диска таким буфером просто наиболее быстрое. Если не заморачиваться, то можно даже не играться с указателем в буфере и его перемещением, а просто работать с дискретностью 20-50кб. Это совсем небольшой фрагмент и тогда перемещение будет представлять всего навсего подстановку такого буфера в устройство (нужно только определить где будет начинаться блок аудио данных, который нужно передать)
Цитата(GuManOiD @  25.1.2007,  18:48 Найти цитируемый пост)
А можно кода кусок

Эх если успею...

Автор: GuManOiD 26.1.2007, 15:31
Я немного не понял принципа работы WaveOut...., на данный момент разобрался, начал творить smile
Alexeis, респект, с примером не напрягайся, ты и так очень помог smile
После сотни в репу получишь именно ты  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)