Правильное использование withMemoryRebound - PullRequest
0 голосов
/ 12 октября 2018

Я использую следующий код:

audioBuff.audioBuffer.floatChannelData![0].withMemoryRebound(to: DSPComplex.self, capacity: bufferSizePOT / 2) {dspComplexStream in
        vDSP_ctoz(dspComplexStream, 2, &output, 1, UInt(bufferSizePOT / 2))
    }

Я хотел бы перейти к некоторым другим примерам, делая это:

audioBuff.audioBuffer.floatChannelData![1024].withMemoryRebound(to: DSPComplex.self, capacity: bufferSizePOT / 2) {dspComplexStream in
        vDSP_ctoz(dspComplexStream, 2, &output, 1, UInt(bufferSizePOT / 2))
    }

, когда у меня есть EXC_BAD_ACCESS (code = 1, address = 0x0) кто-нибудь может объяснить, как правильно его использовать?

Я использовал .withMemoryRebound, потому что я сначала попытался:

vDSP_ctoz(audioBuff.audioBuffer.floatChannelData!, 2, &output, 1, UInt(bufferSizePOT / 2))

, что дало мне ошибку: не удалось преобразоватьзначение типа «UnsafePointer>» к ожидаемому типу аргумента «UnsafePointer»

, что я хотел бы сделать, это перейти в audioBuff.audioBuffer.floatChannelData!кусками делать БПФ

1 Ответ

0 голосов
/ 13 октября 2018

audioBuffer.floatChannelData![0] представляет указатель на сэмплы канала № 0.

Вы можете получить доступ к сэмплам канала № 1 с помощью audioBuffer.floatChannelData![1], когда буфер является стереофоническим без чередования.

НоЯ считаю, что любое звуковое оборудование Apple не поддерживает канал № 1024.

Вам может понадобиться написать что-то подобное, если вы хотите использовать семплы из 1024-го:

    audioBuffer.floatChannelData![0]
        .advanced(by: 1024)
        .withMemoryRebound(to: DSPComplex.self, capacity: bufferSizePOT / 2) {
    dspComplexStream in
        vDSP_ctoz(dspComplexStream, 2, &output, 1, UInt(bufferSizePOT / 2))
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...