Аудирующие глюки на воспроизведении буфера через avaudioplayernode в iOS (SWIFT) *Работая в симуляторе, но не на устройсIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Аудирующие глюки на воспроизведении буфера через avaudioplayernode в iOS (SWIFT) *Работая в симуляторе, но не на устройс

Сообщение Anonymous »

При использовании avaudioplayernode, чтобы запланировать короткий буфер, чтобы немедленно воспроизвести на сенсорном событии («Touch Up Inside»), я заметил слышимые глюки / артефакты при воспроизведении во время тестирования. Аудио вообще не сжимает в симуляторе iOS, однако есть слышимые искажения при воспроизведении, когда я запускаю приложение на фактическом устройстве iOS. Аудиционное искажение происходит случайным образом (запускаемый звук иногда звучит великолепно, в то время как в других случаях оно звучит искаженно) < /p>

Я пытался использовать различные аудиофайлы, форматы файлов и подготовить буфер для воспроизведения, используя метод PreparewithFrameCount, но, к сожалению, результат всегда один и я застрял, что могло бы пойти не так. вплоть до глобалов для ясности и простоты. Любая помощь или понимание будут высоко оценены. Это моя первая попытка разработать приложение iOS и мой первый вопрос, опубликованный в переполнении стека. < /P>

let filePath = NSBundle.mainBundle().pathForResource("BD_withSilence", ofType: "caf")!
let fileURL: NSURL = NSURL(fileURLWithPath: filePath)!
var error: NSError?
let file = AVAudioFile(forReading: fileURL, error: &error)

let fileFormat = file.processingFormat
let frameCount = UInt32(file.length)
let buffer = AVAudioPCMBuffer(PCMFormat: fileFormat, frameCapacity: frameCount)

let audioEngine = AVAudioEngine()
let playerNode = AVAudioPlayerNode()

func startEngine() {

var error: NSError?
file.readIntoBuffer(buffer, error: &error)
audioEngine.attachNode(playerNode)
audioEngine.connect(playerNode, to: audioEngine.mainMixerNode, format: buffer.format)
audioEngine.prepare()

func start() {
var error: NSError?
audioEngine.startAndReturnError(&error)
}

start()

}

startEngine()

let frameCapacity = AVAudioFramePosition(buffer.frameCapacity)
let frameLength = buffer.frameLength
let sampleRate: Double = 44100.0

func play() {

func scheduleBuffer() {
playerNode.scheduleBuffer(buffer, atTime: nil, options: AVAudioPlayerNodeBufferOptions.Interrupts, completionHandler: nil)
playerNode.prepareWithFrameCount(frameLength)
}

if playerNode.playing == false {
scheduleBuffer()
let time = AVAudioTime(sampleTime: frameCapacity, atRate: sampleRate)
playerNode.playAtTime(time)
}
else {
scheduleBuffer()
}
}

// triggered by a "Touch Up Inside" event on a UIButton in my ViewController

@IBAction func triggerPlay(sender: AnyObject) {
play()
}
< /code>

Обновление: < /p>

ОК. Я думаю, что я идентифицировал источник искажения: объем узла (ы) слишком велик при выводе и вызывает обрезку. Добавив эти две строки в мою функцию Startengine, искажение больше не произошло: < /p>

playerNode.volume = 0.8
audioEngine.mainMixerNode.volume = 0.8
< /code>

Однако я до сих пор не знаю, почему мне нужно снизить вывод- мой аудиофайл не обрезает. Я предполагаю, что это может быть результатом того, как реализованы Avaudioplayernodebufferoptions.Erengrests. Когда буфер прерывает другой буфер, может ли быть увеличение выходного объема в результате перерыва, вызывая выходной обрез? Я все еще ищу убедительное понимание того, почему это происходит ... если кто -то хочет/может дать какие -либо разъяснения по этому поводу, это было бы фантастически!

Подробнее здесь: https://stackoverflow.com/questions/289 ... ift-workin
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Очень редкий периодический сбой в AVFoundation.AVAudioPlayerNode.play() (AVAudioPlayerNode.mm:660)
    Гость » » в форуме IOS
    0 Ответы
    36 Просмотры
    Последнее сообщение Гость
  • Очень редкий периодический сбой в AVFoundation.AVAudioPlayerNode.play() (AVAudioPlayerNode.mm:660)
    Anonymous » » в форуме IOS
    0 Ответы
    68 Просмотры
    Последнее сообщение Anonymous
  • Текст визуальные глюки на iOS
    Anonymous » » в форуме IOS
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Текст визуальные глюки на iOS
    Anonymous » » в форуме IOS
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Android [Bluetooth LE] создает характеристику с предопределенным значением перед рекламой услуги на периферийном устройс
    Anonymous » » в форуме Android
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

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