Как обновить AudiounitsetProperty с помощью URL -аргумента для iOS 26?IOS

Программируем под IOS
Ответить
Anonymous
 Как обновить AudiounitsetProperty с помощью URL -аргумента для iOS 26?

Сообщение Anonymous »

Мое приложение может воспроизводить стандартные MIDI -файлы с помощью Avaudiounitmidiinstrument. Я устанавливал звуковой шрифт, подобный этому, где SoundFonturl - это Swift URL объект:

Код: Выделить всё

AudioUnitSetProperty(audioUnit, kMusicDeviceProperty_SoundBankURL, kAudioUnitScope_Global, AudioUnitElement(0), &soundfontURL, UInt32(MemoryLayout.size(ofValue: soundfontURL)))
< /code>
В iOS 26 это вылетает со следующей Backtrace: < /p>
Crashed: com.apple.main-thread
SIGABRT ABORT 0x00000002424200cc
0   libsystem_kernel.dylib  __pthread_kill + 8
1   libsystem_pthread.dylib pthread_kill + 268
2   libsystem_c.dylib   abort + 124
3   libswiftCore.dylib   + 142
4   libswiftCore.dylib   + 30
5   libswiftCore.dylib   + 142
6   CoreFoundation   + 1472
7   CoreFoundation  _CF_forwarding_prep_0 + 96
8   CoreFoundation  CFURLGetFileSystemRepresentation + 196
9   libEmbeddedSystemAUs.dylib  AccessURLAsset(__CFURL const*, int)
10  libEmbeddedSystemAUs.dylib  MIDISynth::SetProperty(unsigned int, unsigned int, unsigned int, void const*, unsigned int)
11  libEmbeddedSystemAUs.dylib  ausdk::AUBase::DispatchSetProperty(unsigned int, unsigned int, unsigned int, void const*, unsigned int)
12  libEmbeddedSystemAUs.dylib  ausdk::AUMethodSetProperty(void*, unsigned int, unsigned int, unsigned int, void const*, unsigned int)
< /code>
xcode показывает следующее предупреждение по этой строке кода: < /p>
Forming 'UnsafeRawPointer' to a variable of type 'URL'; this is likely incorrect because 'URL' may contain an object reference.
Поэтому я попытался преобразовать объект URL в UnsferawPointer явно, а не передавать его в качестве ссылки, как описано в документации Apple, и придумал это:

Код: Выделить всё

if let urlData = String.toData(soundfontURL.absoluteString) {
urlData.withUnsafeBytes { (u8Ptr: UnsafePointer) in
let urlPointer = UnsafeRawPointer(u8Ptr)
AudioUnitSetProperty(audioUnit, kMusicDeviceProperty_SoundBankURL, kAudioUnitScope_Global, AudioUnitElement(0), urlPointer, UInt32(MemoryLayout.size(ofValue: urlPointer)))
}
}
Но та же самая строка кода все еще сбивается, поэтому я не знаю, не является ли это правильным решением проблемы, или это даже не подходящая проблема. и код работал над iOS 18.

Подробнее здесь: https://stackoverflow.com/questions/797 ... for-ios-26
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»