AudioServicesPlaySystemSound не воспроизводит звук на устройстве iOS 8
Я имею AVFoundation
а также AudioToolbox
рамки добавлены в мой проект. В классе, где я хочу играть системный звук, я #include <AudioToolbox/AudioToolbox.h>
и я звоню AudioServicesPlaySystemSound(1007);
, Я тестирую на устройстве под управлением iOS 8
, звуки включены, и громкость достаточно высокая, но я не слышу звука системы при запуске приложения и AudioServicesPlaySystemSound(1007);
называется... что я мог пропустить?
6 ответов
Это будет играть системный звук.
Но помните, что звук системы не будет воспроизводить более длинный звук.
NSString *pewPewPath = [[NSBundle mainBundle] pathForResource:@"engine" ofType:@"mp3"];
NSURL *pewPewURL = [NSURL fileURLWithPath:pewPewPath];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pewPewURL, &_engineSound);
AudioServicesPlaySystemSound(_engineSound);
С iOS10 проигрывание аудио не работает:
SystemSoundID audioID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pathURL, &mySSID);
AudioServicesPlaySystemSound(audioID);
Используйте это вместо:
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pathURL, &audioID);
AudioServicesPlaySystemSoundWithCompletion(audioID, ^{
AudioServicesDisposeSystemSoundID(audioID);
});
Согласно документации:
Эта функция (
AudioServicesPlaySystemSound()
) будет объявлено устаревшим в следующем выпуске. Вместо этого используйте AudioServicesPlaySystemSoundWithCompletion.
Используйте следующий фрагмент кода для воспроизведения звуков:
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; //filename can include extension e.g. @"bang.wav"
if (fileURL)
{
SystemSoundID theSoundID;
OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID);
if (error == kAudioServicesNoError)
{
AudioServicesPlaySystemSoundWithCompletion(theSoundID, ^{
AudioServicesDisposeSystemSoundID(theSoundID);
});
}
}
Кроме того, блок завершения гарантирует, что воспроизведение звука было завершено до его удаления.
Если это не решает проблему, возможно, ваша проблема не связана с кодом, а связана с настройками (устройство в режиме без звука / симуляторе отключает звук из системных настроек MAC, убедитесь, что установлен флажок "Воспроизвести звуковые эффекты интерфейса пользователя")
Для swift 3.x и xcode 8:
var theSoundID : SystemSoundID = 0
let bundleURL = Bundle.main.bundleURL
let url = bundleURL.appendingPathComponent("Invitation.aiff")
let urlRef = url as CFURL
let err = AudioServicesCreateSystemSoundID(urlRef, &theSoundID)
if err == kAudioServicesNoError{
AudioServicesPlaySystemSoundWithCompletion(theSoundID, {
AudioServicesDisposeSystemSoundID(theSoundID)
})
}
Я только что протестировал код на iPad и iPhone под управлением iOS 8, и он работает на реальных устройствах.
По какой-то очень странной причине он не работает на симуляторе iOS 8 для любого устройства, хотя он работает на симуляторах iOS 7 и 7.1.
В противном случае код ниже работает нормально на всех реальных устройствах.
NSString *pewPewPath = [[NSBundle mainBundle] pathForResource:@"engine" ofType:@"mp3"];
NSURL *pewPewURL = [NSURL fileURLWithPath:pewPewPath];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pewPewURL, &_engineSound);
AudioServicesPlaySystemSound(_engineSound);
Вот как это сделать в Swift 5.8 и Xcode 14:
let soundID: SystemSoundID = 1104 // kSystemSoundID_Tock
AudioServicesPlaySystemSoundWithCompletion(soundID) {
AudioServicesDisposeSystemSoundID(soundID)
}
⚠️ Убедитесь, что устройство не находится в беззвучном режиме!