Пытаюсь отладить загадочную синусоиду с помощью AKMIDISampler в Audiokit

В продолжение предыдущей проблемы, я перестал использовать AKSampler, чтобы перейти к функциям, используемым в AKMIDISampler. Мои циклы снова заработали (с помощью этого записи Google Groups) , но у меня воспроизводится синусоидальная волна (что происходит, когда MIDISampler не может найти исходный файл).

Это не проблема с исходными файлами, на которые я ориентируюсь, потому что все они воспроизводятся нормально. Синусоида идет откуда-то еще в процессе, но я не вижу откуда...

Помогите пожалуйста 8•)

(Упрощенный и отредактированный код, чтобы показать только важные детали - свяжитесь с нами для любых разъяснений)

var MIDISamplePlayer = AKMIDISampler()
var sequencer: AKSequencer?
var mixer: AKMixer!

// initialise the mixer
mixer = AKMixer()

do  {
        audiofile = try AKAudioFile(readFileName: SoundFilename as! String, 
        baseDir: .resources)
    } catch let error as NSError {
        print("There's an error: \(error)")
    }

do {
       try sprite.MIDISamplePlayer.loadAudioFile(audiofile)
    } catch let error as NSError {
       print("There's an error: \(error)")
    }

sprite.tracker = AKAmplitudeTracker(sprite.MIDISamplePlayer)
mixer.connect(to:sprite.tracker, bus: mixer.nextInput.bus)

sequencer = AKSequencer(filename: POPmidi)
sequencer?.enableLooping()

let midi = AKMIDI()

for i in 0..<popCount {
    gPOPs[i].MIDISamplePlayer.enableMIDI(midi.client, name: "MIDISample_\(i)")
    mixer.connect(gPOPs[i].MIDISamplePlayer)
    sequencer!.tracks[i].setMIDIOutput(gPOPs[i].MIDISamplePlayer.midiIn)
}

AudioKit.start()
sequencer!.play()

person Mr_P    schedule 07.11.2017    source источник
comment
Я обнаружил еще один случай, когда AVAudioUnitSampler воспроизводит синусоидальную волну (на iOS). Если вы не настроите свой plist для фонового звука, Sampler успешно загрузит ваши сэмплы, но по-прежнему будет воспроизводить синусоидальную волну по умолчанию.   -  person Eric George    schedule 14.11.2017
comment
Спасибо за этот вклад Эрик. У меня уже включена фоновая музыка: Required background modes: App plays audio or streams audio/video using AirPlay это настройка, которую я полагаю. Теперь я собираюсь исследовать AVAudioUnitSampler как возможный источник ????   -  person Mr_P    schedule 14.11.2017
comment
Может ли это происходить из трека темпа, как вы описали в stackoverflow.com/questions/47335779/?   -  person mahal tertin    schedule 16.11.2017
comment
Спасибо, Махал, ваше предложение привело к тому, что я обнаружил проблему здесь, см. Ниже... ????   -  person Mr_P    schedule 18.11.2017


Ответы (4)


Я узнал причину этой проблемы. Я узнал, что MIDI-секвенсор создавал дополнительный трек, когда я дал ему определенное количество MIDI-треков; на четыре трека в моем миди-файле секвенсор выдавал пять. Эта дополнительная дорожка предназначена для темпа (как здесь ).

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

Мое предположение, что первая дорожка используется для дорожки темпа, было проверено, и когда я создал пять дорожек в своем .plist, чтобы они соответствовали секвенсору, синусоидальный тон исчез.

Это привело к обходному пути. Я сделал это, продублировав первый образец в моем .plist, который все равно игнорировался, а затем спрятав спрайт, представляющий этот звук, за пределами экрана. Пока это работает, но если у кого-нибудь есть идея, как управлять этой дорожкой темпа и как ее использовать в AKSequencer, я бы хотел узнать больше.

Итак, вкратце: убедитесь, что в MIDI-файле есть точное количество дорожек, которые вы хотите использовать. Создайте такое же количество AKMIDISampler для использования в AKSequencer, добавив один для трека темпа. Тогда имейте в виду, что первая дорожка в секвенсоре является дорожкой темпа и не будет работать при воспроизведении сэмплов.

person Mr_P    schedule 17.11.2017

Это всего лишь предположение, но очень распространенная проблема заключается в том, что ваши аудиофайлы находятся в месте, которое нравится сэмплеру. Попробуйте поместить аудиофайлы в папку Samples/, как в этих примерах:

http://audiokit.io/playgrounds/Playback/Sequencer/ http://audiokit.io/playgrounds/Playback/Sampler/

или я думаю, что папки Sounds или "Sampler Instruments" работают так же, как и в Sampler Demo:

https://github.com/AudioKit/AudioKit/tree/master/Examples/iOS/SamplerDemo/SamplerDemo/Sounds

person Aurelius Prochazka    schedule 16.11.2017
comment
Я попробую это, если это поможет. Все mp3 на самом деле загружаются и воспроизводятся, как и ожидалось, за исключением первого, который он пытается запустить (который выглядит так, как будто он загружен в консоли, но который не может быть запущен)... - person Mr_P; 16.11.2017

В моем коде также была загадочная синусоида. В моей ситуации оказалось, что у меня было дополнительное появление следующего кода:

AudioKit.output = sampler

Поэтому я случайно дважды указал AudioKit.output. После удаления лишнего вхождения синусоида исчезла. Я не уверен, как это вызвало синусоиду, но я оставляю этот ответ здесь на случай, если он поможет другим, у кого может быть аналогичная проблема.

person eggangel    schedule 11.03.2018

Еще один способ получить эту загадочную синусоиду — использовать обычный подход к установке параметра preferenceSampleRate.

//   try session.setPreferredSampleRate(preferredSampleRate)

в AppDelegate for Audio Session... вместо того, чтобы установить его в AudioKit AKSettings, он создаст загадочный синусоидальный миди-синтезатор...

person KorinW    schedule 12.06.2018