質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

923閲覧

swift、xcord を利用して、マイクから入力した音声をスピーカーからリアルタイム出力するシステム

kawashima

総合スコア10

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2018/10/02 05:59

編集2022/01/12 10:55

前提・実現したいこと

マイクから入力した音声をスピーカーからリアルタイム出力するシステムをつくっています。
エラーが多々発生してしまい、困っています。いろいろ調べたのですが、わかりません。解決方法を教えてください。お願いします。

発生している問題・エラーメッセージ

行番号19において、 エラーメッセージ:cannot invoke initalizer for type ‘AudioUnit‘ with no arguments 行番号28において、 エラーメッセージ:value of optional type "AudioComponent?" (aka"optional<OpaquePointer>") must be unwrapped toa value of type "AudioComponent"(aka"opaquePointer") 行番号30において、 エラーメッセージ:use of unresolved identifier "RecordingCallback": did you mean "SecTrustCallback"? 行番号36において、 エラーメッセージ:use of unresolved identifier "sizeofValue" 行番号44において、 エラーメッセージ:use of unresolved identifier "sizeofValue" 行番号52において、 エラーメッセージ:use of unresolved identifier "sizeof" 行番号59において、 エラーメッセージ:use of unresolved identifier "sizeof" 行番号76において、 エラーメッセージ:use of unresolved identifier "sizeof" 行番号83において、 エラーメッセージ:use of unresolved identifier "sizeof" 行番号91において、 エラーメッセージ:use of unresolved identifier "sizeof" 行番号139において、 エラーメッセージ:cannot call value of non-function type "Ulnt32"
### 該当のソースコード swiftを使用 import Foundation 10 import AVFoundation 11 12 /** 13 * 14 */ 15 class LooperModel { 16 var audioUnit: AudioUnit?; 17 let kOutputBus: UInt32 = 0; 18 let kInputBus: UInt32 = 1; 19 20 func initialize() { 21 audioUnit = AudioUnit() 22 var acd = AudioComponentDescription(); 23 acd.componentType = kAudioUnitType_Output; 24 acd.componentSubType = kAudioUnitSubType_RemoteIO; 25 acd.componentManufacturer = kAudioUnitManufacturer_Apple; 26 acd.componentFlags = 0; 27 acd.componentFlagsMask = 0; 28 29 let ac = AudioComponentFindNext(nil, &acd); 30 AudioComponentInstanceNew( ac, &audioUnit! ); 31 32 var input = AURenderCallbackStruct( inputProc: RecordingCallback, inputProcRefCon: &audioUnit ); 33 AudioUnitSetProperty(audioUnit!, 34 kAudioOutputUnitProperty_SetInputCallback, 35 kAudioUnitScope_Global, 36 kInputBus, 37 &input, 38 UInt32(sizeofValue(input))); 39 40 input.inputProc = RenderCallback; 41 AudioUnitSetProperty(audioUnit!, 42 kAudioUnitProperty_SetRenderCallback, 43 kAudioUnitScope_Global, 44 kOutputBus, 45 &input, 46 UInt32(sizeofValue(input))); 47 48 var flag: UInt32 = 1; 49 AudioUnitSetProperty(audioUnit!, 50 kAudioOutputUnitProperty_EnableIO, 51 kAudioUnitScope_Input, 52 kInputBus, 53 &flag, 54 UInt32( sizeof( UInt32 ) ) ); 55 56 AudioUnitSetProperty(audioUnit!, 57 kAudioOutputUnitProperty_EnableIO, 58 kAudioUnitScope_Output, 59 kOutputBus, 60 &flag, 61 UInt32( sizeof( UInt32 ) ) ); 62 63 var audioFormat: AudioStreamBasicDescription = AudioStreamBasicDescription(); 64 audioFormat.mSampleRate = 44100.00; 65 audioFormat.mFormatID = kAudioFormatLinearPCM; 66 audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; 67 audioFormat.mFramesPerPacket = 1; 68 audioFormat.mChannelsPerFrame = 1; 69 audioFormat.mBitsPerChannel = 16; 70 audioFormat.mBytesPerPacket = 2; 71 audioFormat.mBytesPerFrame = 2; 72 73 AudioUnitSetProperty( audioUnit!, 74 kAudioUnitProperty_StreamFormat, 75 kAudioUnitScope_Output, 76 kInputBus, 77 &audioFormat, 78 UInt32( sizeof( AudioStreamBasicDescription ) ) ); 79 80 AudioUnitSetProperty( audioUnit!, 81 kAudioUnitProperty_StreamFormat, 82 kAudioUnitScope_Input, 83 kOutputBus, 84 &audioFormat, 85 UInt32( sizeof( AudioStreamBasicDescription ) ) ); 86 87 flag = 0; 88 AudioUnitSetProperty( audioUnit!, 89 kAudioUnitProperty_ShouldAllocateBuffer, 90 kAudioUnitScope_Output, 91 kInputBus, 92 &flag, 93 UInt32( sizeof( UInt32 ) ) ); 94 95 AudioUnitInitialize( audioUnit! ); 96 } 97 98 func start() { 99 if(( audioUnit ) == nil) { 100 return; 101 } 102 NSLog("start"); 103 AudioOutputUnitStart( audioUnit! ); 104 } 105 106 func end() { 107 if(( audioUnit ) == nil) { 108 return; 109 } 110 NSLog("end"); 111 AudioOutputUnitStop( audioUnit! ); 112 } 113 } 114 115 var bufs: AudioBufferList?; 116 117 //func RecordingCallback( 118 // inRefCon: UnsafeMutablePointer<Void>, 119 // ioActionFlags: UnsafeMutablePointer<AudioUnitRenderActionFlags>, 120 // inTimeStamp: UnsafePointer<AudioTimeStamp>, 121 // inBusNumber: UInt32, 122 // inNumberFrames: UInt32, 123 // ioData: UnsafeMutablePointer<AudioBufferList>) -> (OSStatus) 124 //{ 125 // var err :OSStatus? = nil 126 // 127 // let buffer = allocateAudioBuffer(1 ,size: inNumberFrames) 128 // bufs = AudioBufferList.init(mNumberBuffers: 1, mBuffers: buffer) 129 // let au = UnsafeMutablePointer<AudioUnit>(inRefCon).memory; 130 // 131 // err = AudioUnitRender(au, 132 // ioActionFlags, 133 // inTimeStamp, 134 // inBusNumber, 135 // inNumberFrames, 136 // &bufs!) 137 // 138 // return err! 139 //} 140 141 func allocateAudioBuffer(let numChannel: UInt32, let size: UInt32) -> AudioBuffer { 142 let dataSize = UInt32(numChannel * UInt32(sizeof(Float64)) * size) 143 let data = malloc(Int(dataSize)) 144 let buffer = AudioBuffer.init(mNumberChannels: numChannel, mDataByteSize: dataSize, mData: data) 145 146 return buffer 147 } 148 149 func checkStatus( status: OSStatus ) { 150 if( status != 0 ) { 151 NSLog("Error: %ld\n", status); 152 } 153 } 154 155 /** 156 音声の再生中に呼ばれるコールバック関数です 157 */ 158 //func RenderCallback ( 159 // inRefCon: UnsafeMutablePointer<Void>, 160 // ioActionFlags: UnsafeMutablePointer<AudioUnitRenderActionFlags>, 161 // inTimeStamp: UnsafePointer<AudioTimeStamp>, 162 // inBusNumber: UInt32, 163 // inNumberFrames: UInt32, 164 // ioData: UnsafeMutablePointer<AudioBufferList>) -> (OSStatus) 165 //{ 166 // let data=UnsafePointer<Int16>(bufs!.mBuffers.mData) 167 // 168 // let dataArray = UnsafeBufferPointer<Int16>(start:data, count: Int(bufs!.mBuffers.mDataByteSize)/sizeof(Int16)) 169 // 170 // let io = UnsafeMutablePointer<Int16>( ioData.memory.mBuffers.mData ); 171 // 172 // let ioDataArr = UnsafeMutableBufferPointer<Int16>(start: io, count: Int(bufs!.mBuffers.mDataByteSize)/sizeof(Int16)); 173 // 174 // for i in 0...dataArray.count-1 175 // { 176 // ioDataArr[ i ] = dataArray[ i ]; 177 // } 178 // 179 // bufs?.mBuffers.mData.dealloc(1); 180 // 181 // 182 // return noErr; 183 //}

補足情報(FW/ツールのバージョンなど)

swift xcord10ベータ版

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kawashima

2018/10/02 06:42

はじめてで勝手がわからずすいません
kawashima

2018/10/02 07:16

わからないので、参考につくろうとして、エラーで困っています。
guest

回答1

0

先ず、"func initialize()"は"init()"ではないんですか?

audioUnitは、"AudioComponentInstanceNew(ac, &audioUnit)"で初期化されるので、"audioUnit = AudioUnit()"の行は不要です。

AURenderCallbackは、例えば次のように書きます。

Swift

1let renderCallback: AURenderCallback = { (inRefCon, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData) -> OSStatus in 2 let pointer = unsafeBitCast(inRefCon, to:LooperModel.self) 3 NSLog("%@", pointer.audioUnit.debugDescription) /* LooperModelのプロパティが呼べる */ 4 /* 何らかの処理 */ 5 return noErr; 6} 7let pointer = unsafeBitCast(self, to:UnsafeMutableRawPointer.self) 8var input = AURenderCallbackStruct(inputProc:renderCallback, inputProcRefCon:pointer) 9AudioUnitSetProperty(audioUnit!, 10 kAudioOutputUnitProperty_SetInputCallback, 11 kAudioUnitScope_Global, 12 kInputBus, 13 &input, 14 UInt32(MemoryLayout<AURenderCallbackStruct>.size) 15)

投稿2018/10/02 08:26

hohokihai

総合スコア56

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問