Обработка звука: Воспроизведение с уровнем громкости

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

Я выполнил часть копирования и записи. Полученный файл идентичен входному файлу. Для этого я использую функции AudioFileReadBytes () и AudioFileWriteBytes () служб AudioFile в структуре AudioToolbox.

Итак, у меня есть байты входного файла, а также его формат аудиоданных (с помощью AudioFileGetProperty () с kAudioFilePropertyDataFormat), но я не могу найти в них переменную для воспроизведения с максимальным уровнем громкости исходного файла.

Чтобы прояснить свою цель, я пытаюсь создать другой звуковой файл, уровень громкости которого увеличен или уменьшен относительно исходного, поэтому меня не волнует уровень громкости системы, установленный пользователем или iOS. .

Возможно ли это сделать с упомянутой структурой? Если нет, есть ли какие-нибудь альтернативные предложения?

Спасибо


редактировать: s байтов, а также его формат аудиоданных (с использованием AudioFileGetProperty () с kAudioFilePropertyDataFormat), но я не могу найти в них переменную для воспроизведения с максимальным уровнем громкости исходного файла.

Чтобы прояснить свою цель, я пытаюсь создать другой звуковой файл, уровень громкости которого увеличен или уменьшен относительно исходного, поэтому меня не волнует уровень громкости системы, установленный пользователем или iOS. .

Возможно ли это сделать с упомянутой структурой? Если нет, есть ли какие-нибудь альтернативные предложения?

Спасибо


редактировать: s байтов, а также его формат аудиоданных (с использованием AudioFileGetProperty () с kAudioFilePropertyDataFormat), но я не могу найти в них переменную для воспроизведения с максимальным уровнем громкости исходного файла.

Чтобы прояснить свою цель, я пытаюсь создать другой звуковой файл, уровень громкости которого увеличен или уменьшен относительно исходного, поэтому меня не волнует уровень громкости системы, установленный пользователем или iOS. .

Возможно ли это сделать с упомянутой структурой? Если нет, есть ли какие-нибудь альтернативные предложения?

Спасибо


редактировать: m пытается создать другой звуковой файл, уровень громкости которого увеличен или уменьшен относительно исходного, поэтому меня не волнует уровень громкости системы, установленный пользователем или iOS.

Возможно ли это сделать с рамки, о которых я говорил? Если нет, есть ли какие-нибудь альтернативные предложения?

Спасибо


редактировать: m пытается создать другой звуковой файл, уровень громкости которого увеличен или уменьшен относительно исходного, поэтому меня не волнует уровень громкости системы, установленный пользователем или iOS.

Возможно ли это сделать с рамки, о которых я говорил? Если нет, есть ли какие-нибудь альтернативные предложения?

Спасибо


редактировать: Просматривая ответ Сэма относительно некоторых основ аудио, я решил расширить вопрос другой альтернативой.

Могу ли я использовать службы AudioQueue для записи существующего звукового файла (который находится в комплекте) в другой файл и играть с уровнем громкости (с с помощью фреймворка) на этапе записи?


update: Вот как я читаю входной файл и записываю результат. Приведенный ниже код снижает уровень звука для "некоторых" значений амплитуды, но с большим шумом. Интересно, что если я выберу 0,5 в качестве значения амплитуды, он увеличивает уровень звука, а не снижает его, но когда я использую 0,1 в качестве значения амплитуды, он снижает звук. Оба случая связаны с неприятным шумом. Думаю, именно поэтому Арт говорит о нормализации, но я понятия не имею о нормализации.

AudioFileID inFileID;

CFURLRef inURL = [self inSoundURL];

AudioFileOpenURL(inURL, kAudioFileReadPermission, kAudioFileWAVEType, &inFileID)

UInt32 fileSize = [self audioFileSize:inFileID];
Float32 *inData = malloc(fileSize * sizeof(Float32)); //I used Float32 type with jv42's suggestion
AudioFileReadBytes(inFileID, false, 0, &fileSize, inData);

Float32 *outData = malloc(fileSize * sizeof(Float32));

//Art's suggestion, if I've correctly understood him

float ampScale = 0.5f; //this will reduce the 'volume' by -6db
for (int i = 0; i < fileSize; i++) {
    outData[i] = (Float32)(inData[i] * ampScale);
}

AudioStreamBasicDescription outDataFormat = {0};
[self audioDataFormat:inFileID];

AudioFileID outFileID;

CFURLRef outURL = [self outSoundURL];
AudioFileCreateWithURL(outURL, kAudioFileWAVEType, &outDataFormat, kAudioFileFlags_EraseFile, &outFileID)

AudioFileWriteBytes(outFileID, false, 0, &fileSize, outData);

AudioFileClose(outFileID);
AudioFileClose(inFileID);
8
задан cocoatoucher 21 October 2010 в 14:52
поделиться