Частоты дискретизации AudioDevice
Q: Как я получаю и устанавливаю частоту дискретизации для AudioDevice? Что, если мое входное аудиоустройство имеет различную частоту дискретизации, чем устройство вывода, как я могу обработать преобразования между двумя?
A: Код ниже взят из Источников Предприятия коммунального обслуживания CoreAudio (/Developer/Extras/CoreAudio/PublicUtility/CAHALAudioDevice.*), и может использоваться, чтобы получить и установить доступные диапазоны частоты дискретизации для данного Аудиоустройства HAL.
Перечисление 1 , Как получить и установить доступные диапазоны частоты дискретизации.
Float64 CAHALAudioDevice::GetNominalSampleRate() const
{
Float64 theAnswer = 0;
CAPropertyAddress theAddress(kAudioDevicePropertyNominalSampleRate);
UInt32 theSize = sizeof(Float64);
GetPropertyData(theAddress, 0, NULL, theSize, &theAnswer);
return theAnswer;
}
void CAHALAudioDevice::SetNominalSampleRate(Float64 inSampleRate)
{
CAPropertyAddress theAddress(kAudioDevicePropertyNominalSampleRate);
SetPropertyData(theAddress, 0, NULL, sizeof(Float64), &inSampleRate);
}
UInt32 CAHALAudioDevice::GetNumberAvailableNominalSampleRateRanges() const
{
UInt32 theAnswer = 0;
CAPropertyAddress theAddress(kAudioDevicePropertyAvailableNominalSampleRates);
if(HasProperty(theAddress))
{
UInt32 theSize = GetPropertyDataSize(theAddress, 0, NULL);
theAnswer = theSize / sizeof(AudioValueRange);
}
return theAnswer;
}
void CAHALAudioDevice::GetAvailableNominalSampleRateRanges(UInt32& ioNumberRanges, AudioValueRange* outRanges) const
{
CAPropertyAddress theAddress(kAudioDevicePropertyAvailableNominalSampleRates);
if(HasProperty(theAddress))
{
UInt32 theSize = ioNumberRanges * sizeof(AudioValueRange);
GetPropertyData(theAddress, 0, NULL, theSize, outRanges);
ioNumberRanges = theSize / sizeof(AudioValueRange);
}
else
{
ioNumberRanges = 0;
}
} |
Когда ввод имеет различную частоту дискретизации, чем вывод, существует два способа удовлетворить Вашим целям:
Можно использовать AudioConverter для обработки преобразований частоты дискретизации между устройствами. AudioConverter может быть создан с потоковыми форматами ввода и вывода. Тогда необходимо использовать AudioConverterFillBuffer для преобразования буфера данных.
Используйте DefaultOutputUnit. Это аудиоустройство обработает частоту дискретизации converstion между Вашим устройством ввода данных и устройством вывода по умолчанию автоматически. Посмотрите пример кода DefaultOutputUnit.
История версии документа
| Дата | Примечания |
|---|---|
| 22.07.2011 | Передовая статья |
| 09.12.2003 | Новый документ, что, добираясь, устанавливая и преобразовывая частоты дискретизации с Аудиоустройствами. |