IOS는 오디오를 녹음하고 실시간으로 파일로 분할합니다.

사용자 3703910

오디오를 서버로 스트리밍해야하는 앱을 만들고 있습니다. 제가하고 싶은 것은 녹음 된 오디오를 청크로 나누어 녹음하는 동안 업로드하는 것입니다.

두 대의 레코더를 사용했지만 제대로 작동하지 않았습니다. 청크의 차이를들을 수 있습니다 (몇 밀리 초 동안 멈춤).

어떻게 할 수 있습니까?

리듬 피스트 맨

문제는 두 부분으로 나눌 수 있습니다 : 녹음과 청크 (그리고 업로드,하지만 누가 신경 쓰는지).

마이크에서 녹음하고 파일에 쓰는 경우 AVAudioEngine및로 빠르게 시작할 수 있습니다 AVAudioFile. 장치의 기본 입력 샘플링 속도로 청크를 기록하는 샘플은 아래를 참조하십시오 (아마도 속도 변환을 원할 것입니다).

"청크 간의 차이"에 대해 이야기 할 때 오디오 데이터를 여러 조각으로 나눌 수있는 기능을 언급하는 것입니다. 이러한 기능을 연결하면 불연속 소리가 들리지 않습니다. 예를 들어 LPCM 오디오 데이터는 샘플 수준에서 청크로 나눌 수 있지만 LPCM 비트 전송률이 높기 때문에 adpcm (iOS에서는 ima4라고 함) 또는 mp3 또는 aac와 같은 패킷 화 된 형식을 사용할 가능성이 더 큽니다. 이러한 형식은 패킷 경계 (예 : 64, 576 또는 1024 샘플)에서만 나눌 수 있습니다. 청크가 헤더없이 작성 되었다면 (일반적으로 mp3 및 aac, ima4에 대해 확실하지 않음) 연결은 간단합니다. 청크를 끝에서 끝까지 배치하기 만하면됩니다.cat명령 줄 도구를 사용합니다. 안타깝게도 iOS에는 mp3 인코더가 없으므로 aac를 가능한 형식으로 남겨 두지 만 재생 요구 사항에 따라 다릅니다. iOS 기기 및 Mac에서 확실히 재생할 수 있습니다.

import AVFoundation

class ViewController: UIViewController {

    let engine = AVAudioEngine()

    struct K {
        static let secondsPerChunk: Float64 = 10
    }

    var chunkFile: AVAudioFile! = nil
    var outputFramesPerSecond: Float64 = 0  // aka input sample rate
    var chunkFrames: AVAudioFrameCount = 0
    var chunkFileNumber: Int = 0

    func writeBuffer(_ buffer: AVAudioPCMBuffer) {
        let samplesPerSecond = buffer.format.sampleRate

        if chunkFile == nil {
            createNewChunkFile(numChannels: buffer.format.channelCount, samplesPerSecond: samplesPerSecond)
        }

        try! chunkFile.write(from: buffer)
        chunkFrames += buffer.frameLength

        if chunkFrames > AVAudioFrameCount(K.secondsPerChunk * samplesPerSecond) {
            chunkFile = nil // close file
        }
    }

    func createNewChunkFile(numChannels: AVAudioChannelCount, samplesPerSecond: Float64) {
        let fileUrl = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("chunk-\(chunkFileNumber).aac")!
        print("writing chunk to \(fileUrl)")

        let settings: [String: Any] = [
            AVFormatIDKey: kAudioFormatMPEG4AAC,
            AVEncoderBitRateKey: 64000,
            AVNumberOfChannelsKey: numChannels,
            AVSampleRateKey: samplesPerSecond
        ]

        chunkFile = try! AVAudioFile(forWriting: fileUrl, settings: settings)

        chunkFileNumber += 1
        chunkFrames = 0
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let input = engine.inputNode!

        let bus = 0
        let inputFormat = input.inputFormat(forBus: bus)

        input.installTap(onBus: bus, bufferSize: 512, format: inputFormat) { (buffer, time) -> Void in
            DispatchQueue.main.async {
                self.writeBuffer(buffer)
            }
        }

        try! engine.start()
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

여러 녹음 오디오 파일을 저장하고 모든 녹음 오디오를 가져옵니다.

분류에서Dev

오디오를 Android 서비스로 녹음하고 타이머를 사용하여 중지합니다. 녹화 길이가 다양하고 서비스가 중단되지 않는 것 같습니다.

분류에서Dev

NAudio로 실시간 크기 값으로 두 개의 오디오 파일을 동시에 재생하는 방법

분류에서Dev

실시간으로 카메라의 비디오를 캡처하는 방법은 무엇입니까?

분류에서Dev

톤이 발생하는 오디오 파일을 자동으로 분할하려면 어떻게합니까?

분류에서Dev

hsdpa 동글로 전화를 걸고 오디오를 재생하고 사용자 피드백을 C #으로 녹음합니다.

분류에서Dev

오디오 파일을 재생하기 위해 오디오 경로를 얻는 방법은 무엇입니까?

분류에서Dev

다른 뷰 컨트롤러 IOS7로 돌아간 후 오디오를 일시 중지하는 방법

분류에서Dev

자바 스크립트는 배열 버퍼를 오디오로 재생합니다. "오디오 데이터를 디코딩 할 수없는 오디오 데이터를 디코딩 할 수 없음"을 해결하는 데 도움이 필요합니다.

분류에서Dev

다른 오프셋에서 ffmpeg를 사용하여 오디오와 비디오를 하나의 파일로 결합하는 방법은 무엇입니까?

분류에서Dev

Pjsip iOS 수신 측으로 사운드를 전송하고 녹음하는 방법은 무엇입니까?

분류에서Dev

xamarin은 오디오 녹음을 구성하고 서버에 업로드합니다.

분류에서Dev

녹음 된 오디오 파일을 iOS에서 .wav 형식으로 변환

분류에서Dev

mediarecorder 비디오 녹화를 일시 중지하고 다시 시작하는 방법

분류에서Dev

FFmpeg는 시작 시간을 무시하여 오디오 파일 android를 트리밍합니다.

분류에서Dev

iOS : 비디오를 표시하지 않고 녹화 할 수 있습니까?

분류에서Dev

모노 소스로 스테레오로 녹음 된 비디오의 오디오를 다시 코딩하려면 어떻게해야합니까?

분류에서Dev

MonoTouch / iPhone 5s로 120fps 비디오를 녹화하려고 할 때 충돌이 발생합니다.

분류에서Dev

한 파일에서 다른 파일로 오디오 믹스를 추가하는 방법

분류에서Dev

다중 채널 오디오 .Mov를 단일 채널 오디오 .Mov로 병합하는 명령 줄 방식

분류에서Dev

xcode ios 프로젝트를 컴파일하고 실행하는 데 오랜 시간이 걸리나요?

분류에서Dev

ffmpeg는 비디오 파일에서 더 긴 경우 오디오를 비디오 길이로 자릅니다.

분류에서Dev

HTML에서 다른 비디오가 일시 중지 된 시간을 기준으로 비디오를 변경하는 방법

분류에서Dev

입력 오디오를 트리밍 한 다음 단일 ffmpeg 명령에서 비디오의 실제 오디오로 바꾸는 방법은 무엇입니까?

분류에서Dev

다시 인코딩하지 않고 기본 MKV 파일의 오디오 파일을 변경하지 않고 MKV 비디오의 일부를 다른 MKV 비디오로 변경하는 방법

분류에서Dev

ffmpeg로 비디오 파일을 분할하는 방법은 무엇입니까?

분류에서Dev

비디오를 일시 중지하고, 다른 비디오를 재생하고, 원래 비디오로 다시 시작하는 방법

분류에서Dev

새 asound.conf 파일을로드하기 위해 alsa 오디오를 다시 초기화하는 방법

분류에서Dev

Netlogo Behavior 공간으로 컴파일하는 분할 프로세스 중에 "dividing by 0"오류를 피하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    여러 녹음 오디오 파일을 저장하고 모든 녹음 오디오를 가져옵니다.

  2. 2

    오디오를 Android 서비스로 녹음하고 타이머를 사용하여 중지합니다. 녹화 길이가 다양하고 서비스가 중단되지 않는 것 같습니다.

  3. 3

    NAudio로 실시간 크기 값으로 두 개의 오디오 파일을 동시에 재생하는 방법

  4. 4

    실시간으로 카메라의 비디오를 캡처하는 방법은 무엇입니까?

  5. 5

    톤이 발생하는 오디오 파일을 자동으로 분할하려면 어떻게합니까?

  6. 6

    hsdpa 동글로 전화를 걸고 오디오를 재생하고 사용자 피드백을 C #으로 녹음합니다.

  7. 7

    오디오 파일을 재생하기 위해 오디오 경로를 얻는 방법은 무엇입니까?

  8. 8

    다른 뷰 컨트롤러 IOS7로 돌아간 후 오디오를 일시 중지하는 방법

  9. 9

    자바 스크립트는 배열 버퍼를 오디오로 재생합니다. "오디오 데이터를 디코딩 할 수없는 오디오 데이터를 디코딩 할 수 없음"을 해결하는 데 도움이 필요합니다.

  10. 10

    다른 오프셋에서 ffmpeg를 사용하여 오디오와 비디오를 하나의 파일로 결합하는 방법은 무엇입니까?

  11. 11

    Pjsip iOS 수신 측으로 사운드를 전송하고 녹음하는 방법은 무엇입니까?

  12. 12

    xamarin은 오디오 녹음을 구성하고 서버에 업로드합니다.

  13. 13

    녹음 된 오디오 파일을 iOS에서 .wav 형식으로 변환

  14. 14

    mediarecorder 비디오 녹화를 일시 중지하고 다시 시작하는 방법

  15. 15

    FFmpeg는 시작 시간을 무시하여 오디오 파일 android를 트리밍합니다.

  16. 16

    iOS : 비디오를 표시하지 않고 녹화 할 수 있습니까?

  17. 17

    모노 소스로 스테레오로 녹음 된 비디오의 오디오를 다시 코딩하려면 어떻게해야합니까?

  18. 18

    MonoTouch / iPhone 5s로 120fps 비디오를 녹화하려고 할 때 충돌이 발생합니다.

  19. 19

    한 파일에서 다른 파일로 오디오 믹스를 추가하는 방법

  20. 20

    다중 채널 오디오 .Mov를 단일 채널 오디오 .Mov로 병합하는 명령 줄 방식

  21. 21

    xcode ios 프로젝트를 컴파일하고 실행하는 데 오랜 시간이 걸리나요?

  22. 22

    ffmpeg는 비디오 파일에서 더 긴 경우 오디오를 비디오 길이로 자릅니다.

  23. 23

    HTML에서 다른 비디오가 일시 중지 된 시간을 기준으로 비디오를 변경하는 방법

  24. 24

    입력 오디오를 트리밍 한 다음 단일 ffmpeg 명령에서 비디오의 실제 오디오로 바꾸는 방법은 무엇입니까?

  25. 25

    다시 인코딩하지 않고 기본 MKV 파일의 오디오 파일을 변경하지 않고 MKV 비디오의 일부를 다른 MKV 비디오로 변경하는 방법

  26. 26

    ffmpeg로 비디오 파일을 분할하는 방법은 무엇입니까?

  27. 27

    비디오를 일시 중지하고, 다른 비디오를 재생하고, 원래 비디오로 다시 시작하는 방법

  28. 28

    새 asound.conf 파일을로드하기 위해 alsa 오디오를 다시 초기화하는 방법

  29. 29

    Netlogo Behavior 공간으로 컴파일하는 분할 프로세스 중에 "dividing by 0"오류를 피하려면 어떻게해야합니까?

뜨겁다태그

보관