При использовании 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
Аудирующие глюки на воспроизведении буфера через avaudioplayernode в iOS (SWIFT) *Работая в симуляторе, но не на устройс ⇐ IOS
Программируем под IOS
1741694619
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. Когда буфер прерывает другой буфер, может ли быть увеличение выходного объема в результате перерыва, вызывая выходной обрез? Я все еще ищу убедительное понимание того, почему это происходит ... если кто -то хочет/может дать какие -либо разъяснения по этому поводу, это было бы фантастически!
Подробнее здесь: [url]https://stackoverflow.com/questions/28971609/audible-glitches-on-buffer-playback-via-avaudioplayernode-in-ios-swift-workin[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия