2014-12-31 2 views
-3

Я пытаюсь подключить Delphi к Windows VolumeControl API для отображения звука WaveOut. я нашел следующий код, но он не работает:Подключить WaveOut к Delphi

function Wave_SuportaControleVolume: boolean; 
var 
    Caps: TWaveOutCaps; 
begin 
    if WaveOutGetDevCaps(WAVE_MAPPER, @Caps, 
     SizeOf(Caps)) = MMSYSERR_NOERROR then 
    Result := Caps.dwSupport and WAVECAPS_VOLUME <> 0 
    else 
    Result := false; 
end; 

type 
    TVolume = record 
    Esquerdo: Word; 
    Direito: Word; 
    end; 

function Wave_ObterVolume: TVolume; 
begin 
    waveOutGetVolume(integer(WAVE_MAPPER), @Result); 
end; 

procedure Wave_DefinirVolume(Volume: TVolume); 
begin 
    waveOutSetVolume(integer(WAVE_MAPPER), LongWord(Volume)); 
end; 

Когда я использую этот код, значение Wave_ObterVolume не всегда 65535, независимо от того, что я делаю.

Моя цель очень проста: Я хочу видеть значение звука в качестве индикатора выполнения, когда я воспроизвожу файлы MP4 или MP3. У меня уже есть компонент компоновки и таймера, который должен отображаться на индикаторе выполнения. Фактически, для этого я использовал бы какой-то компонент VUMER.

Подробнее: Использование Delphi 7. Я знаю, это очень старый, но это мой доступный инструмент.

Итак, вопрос в том, какой код я использую для доступа к Windows VolumeControl от WaveOut?

+1

У вас возникли проблемы с вашим вопросом. Описание проблемы: «не работает». Мое предположение заключалось в том, что вы не понимали, что означало 65535. Возможно, вы этого не сделали. Но теперь кажется, что вы не будете удовлетворены, пока ваша проблема, что бы она ни была, решена. Все, что мы можем сделать, это попытаться ответить на вопросы, которые вы задаете. –

+0

Возможный дубликат - http://stackoverflow.com/questions/25967462/delphi-get-wave-amplitude –

ответ

0

The documentation говорит:

Значение 0xFFFF представляет собой полный объем, а значение 0x0000 тишина.

Похоже, что громкость полностью заполнена.

Вы не проверяете возвращаемое значение всех вызовов API. Это ошибка. Всегда проверяйте возвращаемые значения и применяйте соответствующую обработку ошибок.

+0

Благодарим вас за ответ. Фактически, я видел это объяснение о полном объеме и тишине. Но объем * не * полностью заполнен. – Gabarito007

+0

Система выглядит по-другому. Предполагая, конечно, что 'waveOutGetVolume' удалось (вы не можете сказать), и что' WAVE_MAPPER' является правильным устройством. –

+0

Итак, как это решить? Как вы могли бы написать код, чтобы проверить возвращаемые значения, узнать о том, что waveOutGetVolume удалось, и что WAVE_MAPPER - это правильное устройство? – Gabarito007

0

Боюсь, что код, который вы используете, не даст вам желаемых результатов. Зачем?

Код, который вы используете, предназначен для программного извлечения или установки уровня громкости выходного сигнала волны так же, как если бы вы делали это, перемещая ползунок в звуковом микшере.

Теперь, чтобы вы могли получить визуальное представление воспроизводимого звука, вам действительно необходимо записать этот звук, а затем получить значение звука из записанных данных.

Если вы находитесь в Windows XP, вы делаете это просто путем записи звука с канала «Выход программного обеспечения», но если вы находитесь в Windows Vista и новее, это больше не возможно, если вы не используете некоторые необоснованные программные драйверы. Зачем?

Все звуковые драйверы, созданные для Windows Vista или новее, не должны записываться с канала «выхода программного обеспечения», поскольку в прошлом это часто использовалось для распространения любых мер защиты цифровых прав. Например, Pepole просто воспроизводил контент с цифровой защитой в Windows Media Player, а затем записывал звук в другую программу. Это означало, что все механизмы цифровой защиты были просто устаревшими.

+0

SilverWarior, не могли бы вы лучше объяснить, как записывать звук, используя канал «Software output»? Да, я все еще в Windows XP. – Gabarito007

+0

О записи звука, я уже ее сохранил. Я хотел бы получить визуальное представление воспроизводимого звука из файлов MP3 и MP4, уже сохраненных на диске. – Gabarito007

+0

До сих пор мой единственный опыт работы со звуками (запись, визуализация VU) заключается в использовании звуковой библиотеки BASS (http://www.un4seen.com/), которая не является бесплатной библиотекой, но вы все равно можете использовать ее для некоммерческих продуктов. Теперь, если моя память служит мне в корне, звуковая библиотека BASS также содержит несколько примеров того, как ее использовать, и один из них является примером для визуализации VU. Я не уверен в этом, так как я вернулся с тех пор, как использовал это. Существуют и другие библиотеки, которые могут предоставить вам аналогичную функциональность, и вы могли бы сделать это, используя чистый API, но я не знаю, как это сделать. – SilverWarior

Смежные вопросы