Я хочу прочитать звуковой файл из пакета приложений, скопировать его, поиграть с максимальным уровнем громкости (значение усиления или пиковая мощность, я не уверен в его техническом названии), а затем снова запишите его как другой файл в пакет.
Я выполнил часть копирования и записи. Полученный файл идентичен входному файлу. Для этого я использую функции 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);