• 締切済み

Swiftについて教えてください

マイクから音を検知したいと思い、 http://blog.koogawa.com/entry/2016/04/17/133052 の記事を参考にさせていただいています self.startUpdatingVolume()で呼び出すメソッドをサンプルと同じように定義したのですが、たくさんのエラーが出て、解決方法が分からず困っています。 var dataFormat = AudioStreamBasicDescription( mSampleRate: 44100.0, mFormatID: kAudioFormatLinearPCM, mFormatFlags: AudioFormatFlags(kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked), mBytesPerPacket: 2, mFramesPerPacket: 1, mBytesPerFrame: 2, mChannelsPerFrame: 1, mBitsPerChannel: 16, mReserved: 0) のところで Cannot find an initializer for type 'AudioStreamBasicDescription' that accepts an argument list of type '(mSampleRate: Double, mFormatID: Int, mFormatFlags: UInt32, mBytesPerPacket: Int, mFramesPerPacket: Int, mBytesPerFrame: Int, mChannelsPerFrame: Int, mBitsPerChannel: Int, mReserved: Int)' エラーの内容を調べて、引数リストを受け付ける初期化メソッドは['AudioStreamBasicDescription' には見つかりません。ということは分かったのですが、Core Audioについて理解が不十分なところが多いので、解決方法が分かりません。解決方法を教えてください、よろしくお願いします。

  • dkong
  • お礼率86% (170/197)
  • Swift
  • 回答数2
  • ありがとう数3

みんなの回答

  • koogawa
  • ベストアンサー率0% (0/0)
回答No.2

他の方も仰っている通り、お使いの Xcode バージョン(7.3など)を教えて頂けると回答しやすくなると思います。また、可能であればプロジェクトの "Deployment Target" も添えて頂けるとさらに良いです(画像を添付しました)。

dkong
質問者

お礼

回答ありがとうございます。マイクから音を検知したいと思いサイトを参考にさせていただいています。

dkong
質問者

補足

Xcode バージョン6.4 Deployment Target8.0 です。 Xcode バージョン7.2を使い、Deployment Target8.0にすると質問させていただいた箇所のエラーは消えました。

回答No.1

そのAudioStreamBasicDescriptionの定義コードを私の環境(Xcode7.3環境)にコピペしてみましたが、特にエラーは出ません。 以前から古いXcode環境を使用されていたかと思うのですが、現在お使いのXcodeのバージョンはいくつですか? もしかすると古いXcode(古いSDK)だとそのイニシャライザがまだ定義されておらず使えないのかもしれません。 もしそうであれば、 http://qiita.com/syuhei1985/items/4404f1360863ba8a06ac とかを参考に var dataFormat = AudioStreamBasicDescription() dataFormat.mSampleRate = 44100.00 dataFormat.mFormatID = kAudioFormatLinearPCM dataFormat.mFormatFlags = kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked dataFormat.mBytesPerPacket = 2 dataFormat.mFramesPerPacket = 1 dataFormat.mBytesPerFrame = 2 dataFormat.mChannelsPerFrame = 1 dataFormat.mBitsPerChannel = 16 と、パラメータなしでAudioStreamBasicDescriptionを生成し、プロパティを1個ずつ初期化すればうまくいくかもしれません。 可能ならそろそろ最新のXcodeに移行した方がネットで解説されている情報を利用しやすいと思います。 ただし、Swiftのバージョンも変わる可能性がありますので、その場合、言語仕様の変更点がいろいろあり、これまで正常にビルドできていたコードがいくつかビルドエラーになる可能性があります。それを修正する余裕のある時に実施することをお勧めします。

dkong
質問者

お礼

回答ありがとうございます。

dkong
質問者

補足

Xcode バージョン6.4です。 Xcode バージョン7.2を使うと質問させていただいた箇所のエラーは消えました。Xcode バージョン7.3で試してみます。

関連するQ&A

  • Swiftについて教えてください

    タイマー処理をしようと以下のようにしたのですが、 Cannot invoke 'scheduledTimerWithTimeInterval' with an argument list of type '(Float, target: ViewController, selector: String, userInfo: nil, repeats: Bool)'というエラーがでます。 Floatの部分に直接、小数を記述するとエラーが消えるのですが、self.Intervalなど変数で指定できないのでしょうか? import UIKit class ViewController: UIViewController { // var Interval:Float = 1.0 // var timer = NSTimer() override func viewDidLoad() { super.viewDidLoad() //タイマー開始 self.start() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //スライドショーを開始する func start(){ //タイマー定義 self.timer = NSTimer.scheduledTimerWithTimeInterval(self.Interval, target: self, selector: "next:", userInfo: nil, repeats: true) } //次へ func next(timer:NSTimer){ println("次へ") } }

    • ベストアンサー
    • Swift
  • xcode符合違いエラーについて

    こんにちは。 質問させてください。 現在Xcode 5.0.2(5A3005)でコードを書いていますが unsigned int a[2] = {100,200}; int b[2] = {a[0],a[1]}; というようなコード(実際には配列の中身は数千)で Non-constant-expression cannot be narrowed from type 'unsigned int' to 'int' in initializer list; というエラーが出てビルド出来ません。 海外のSDKのコードなので書き換えるのが面倒臭くコードを書き換えずエラーを消したいのですが、Xcodeのどこのフラグを切り替えればいいでしょうか? ※趣味コードなのでバグが出るから治せというコメントは不要です。

  • Swiftについて教えてください

    Swiftで分からないことがあり、投稿させていただきました。UIImageViewにタッチの機能をつけてlet stamp = Timage()で呼び出しているサンプルを参考にタッチをピンチジェスチャーに変更してlet stamp = Pimage()で呼び出すと Missing argument for parameter 'coder' in callというエラーがでます。調べて呼び出し文で引数が足りない。ということが分かったのですが、どのようにして呼び出したらいいのかわかりません。Swift初心者なので、具体的に教えていただければありがたいです。よろしくお願いします。 タッチ//////////////////////////////////////////////////////////////////////////////////////////////////////////// import UIKit class Timage: UIImageView { override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { self.superview?.bringSubviewToFront(self) } override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) { let touch = touches.first as! UITouch let dx = touch.locationInView(self.superview).x - touch.previousLocationInView(self.superview).x let dy = touch.locationInView(self.superview).y - touch.previousLocationInView(self.superview).y self.center = CGPointMake(self.center.x + dx, self.center.y + dy) } } ピンチジェスチャー/////////////////////////////////////////////////////////////////////////////////////////////////////////////// import UIKit class Pimage: UIImageView { var gestureEnabled = true private var beforePoint = CGPointMake(0.0, 0.0) private var currentScale:CGFloat = 1.0 required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.userInteractionEnabled = true let pinchGesture = UIPinchGestureRecognizer(target: self, action: "Pinch") self.addGestureRecognizer(pinchGesture) } }

    • ベストアンサー
    • Swift
  • Swiftについて教えてください

    下記のようにようにサーバにある画像を読み込んでいます。サーバのimgフォルダの中の画像( 1.png~20.png)を全て読み込み配列に入れる方法を質問して、回答をいただき解決しました。(以下のコード)それを拡張してサーバのimgフォルダの中の画像の数が分かってないものを配列に読み込もうとしています。画像の数が分かってないものを全て読み込み配列に入れる方法が分からず困っています。よろしくお願いします。 // URLリクエストを作る for i in 1...20 { let url = NSURL(string:"http://xxxxxxxxxxxxxxxx/img/"+String(i)+".png") let request = NSURLRequest(URL : url!) var error: NSError? // 同期通信を開始 if let resData:NSData = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: &error){ let image = UIImage(data:resData) self.imageArray.append(image!) } }

  • Java初心者です、エラーの意味が理解できません

    今晩は。Java初心者です、宜しくお願いします。 下のようなコードを書きましたが、 「コンストラクタ'sub(int)'は未定義です」、 「/型subのメソッド'disp(int)'は引数()に適用出来ません」というエラーが出ます。 エラーの意味が理解できません。 1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。 2.Subには自動的にコンストラクタが生成されないのでしょうか。   されないとすれば、どの部分の書き方が悪いのでしょうか。 3.「型subのメソッド'disp(int)'への引数の渡し方」は、文法的にまずいということでしょうか。 それとも全てコンストラクタの生成が原因なのでしょうか。 ========================================================================= class Sub { void disp(int a) { System.out.println("a = " + a ); } } public class クラス { public static void main(String[] args) { Sub s = new Sub(10); //コンストラクタ'sub(int)'は未定義です s.disp();     //型subのメソッド'disp(int)'は引数()に適用出来ません  } }

    • ベストアンサー
    • Java
  • プログラミングについてです。

    単純なかけ算を利用したプログラムなんですが、エラーコードが出てきてしまって、全然デバックできません。 わかる方、どこがどういうふうに間違っているか、ご教授お願いします。 使っているPCはMacBook Proです。 #include <stdio.h> int main( void ) { int go, hachi, goukei, azukari, otsuri ; printf("五十円切手の枚数と八十円切手の枚数を入力してください。(例 10,4):") ; scanf("%d,%d", go, hachi) ; goukei = go * 50 + hachi * 80 ; printf("合計金額は%dです、いくら支払いますか?:",goukei) ; scanf("%d 円",azukari) ; otsuri = azukari - goukei ; printf("ありがとうございました、おつりは %d 円です。",otsuri) ; return 0 ; } エラー内容 q2_5.c: In function ‘main’: q2_5.c:8: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’ q2_5.c:8: warning: format ‘%d’ expects type ‘int *’, but argument 3 has type ‘int’ q2_5.c:8: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’ q2_5.c:8: warning: format ‘%d’ expects type ‘int *’, but argument 3 has type ‘int’ q2_5.c:11: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’ q2_5.c:11: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’ です。お願いします。

  • java:サブクラスメソッドを呼び出したいです。

    java のプログラムで抽象クラスをオーバーライドしたサブクラスのメソッドをスーパークラスで呼び出したいのですが、どうしてもコンパイルが通りません。また通ったとしてもコマンドプロンプト画面で、 c:\File>javac UseSam.java c:\File>java UseSam 5 6 c:\File> となってしまい(この問題で求められている回答)5+6の結果 11 が返ってきません。 c:\File>java UseSam a a c:\File>型が違います c:\File>java UseSam 3 4 5 c:\File>引数の個数が不正です 上記のように打つとエラーメッセージだけは返ってきます。 つたない文章とはなってしまいましたが、ご教授のほどよろしくお願いいたします。 プログラムは下記のとおりとなります。(問題点などの指摘などしていただけたらありがたいです) 抽象クラスAbsSamは抽象メソッドadd含んでいる。 抽象メソッドaddは整数を返すメソッドで、整数型の引数aとbをとる。 abstract class AbsSam {     public abstract int add(int a, int b); } Samでは、抽象メソッドaddを実装し、addは引数a,bの和を返す。 public class Sam extends AbsSam {     public int add(int a,int b) {     return a + b ;     } } mainメソッドを含むUseSam。 プログラム実行時、引数として2つの整数を渡します。 c:\File>java UseSam 5 6 c:\File>11 と計算結果が返ってくる。 (条件) ・引数が2個でない場合、エラーメッセージを返す。 ・引数が数値でない場合、エラーメッセージを返す。 ・正しい引数が与えられた場合、addメソッドを実行し、addメソッドの続行結果を表示して終了とする。 public class UseSample { public static void main( String[] args ) { try { //引数が2個でない場合 if(args.length != 2){ System.out.println("エラーメッセージ:引数の個数が不正です"); //引数が2個の場合 } else if (args.length == 2) { int a = Integer.parseInt( args[0] ); int b = Integer.parseInt( args[1] ); AbsSam sum = new Sam(); sum.a = a; sum.b = b; System.out.println ("計算結果" + sum.add()); } else { System.out.println("エラー"); } //例外処理 } catch(NumberFormatException e) { System.out.println("エラーメッセージ:引数の型が不正です" ); } catch(Exception e) { System.out.println("エラー"); } } } 抽象クラスとサブクラスは問題ないのですが、UseSamがうまく動作しません。 ご教授のほどよろしく願いいたします。

    • ベストアンサー
    • Java
  • 計算クラスのメソッドについて

    <問題> Mainクラス mainメソッド 1)実行時に引数を2つ付けて実行する。(数字) 2)計算クラスのオブジェクトを生成。 3)argsの0番目と1番目から値を取得し、int型に変換する。 4)int型に変換した値2つを引数として、計算クラスの足し算メソ   ッドを実行し、戻り値を取得して表示する。 計算クラス 足し算メソッド(引数=int,int) 1)int型の数字を引数として2つ受け取る。 2)二つの引数の値を足し算する。 3)計算した値を戻り値とする。 *********************************************************** 上記の問題についての質問です。 最初mathくらすのメソッドを使うのかと思ったのですが、 足し算を計算するようなメソッドが無かったのでネットで検索 して見つけたcalcAdd()というメソッドを使って記述してみました。 でも「シンボルを見つけられません」のエラーが出てコンパイル 出来ないし、メソッドの使い方も違うような気がするので、 分かる方正しい記述の仕方を教えてください。 package siryou; class Keisan { int cal; int cul; public int tashizan(int a, int u) { cal = a; cul = u; int kekka = (Integer)calcAdd(cal, cul, 0); return kekka; } } class TashiHikiKakeWari { public static void main(String args[]) { Keisan ki = new Keisan(); String str1 = args[0]; String str2 = args[1]; int res1 = Integer.parseInt(str1); int res2 = Integer.parseInt(str2); ki.tashizan(res1, res2); int kekka = ki.tashizan(res1, res2); System.out.println(kekka); } } ************************************************************ calcAdd()メソッドの呼び出し方も間違っている気がするのですが、 そもそもこのメソッドって呼び出せば自動的に計算されるように なっているのですか? それとも足し算を計算する記述は別にしなければならないのでしょうか?

    • ベストアンサー
    • Java
  • pythonのargparseで引数の数の可変

    現在、pythonのプログラムで、コマンドにオプションを付けて、それによって戻ってくる結果を表示するようにしたいと思い作成しています。 それで、次のようなプログラムを作ることができました。 $ python pythonProg.py -s 5 5 5 5 5 5 5+5+5 == 15 (githubでの現在のソースコード内容) https://github.com/KenjiMaehara/raspberryPiTCPClient/blob/testBranch20170201_02/testSpi161101/pythonProg.py 現在、-sのオプションと3つの引数x,y,zを渡すと、x,y,zの総和を表示するようにしているのですが、 引数の数を2つにした場合、次のようなエラーが出てきます。 $ python pythonProg.py -s 5 5 usage: pythonProg.py [-h] [-v | -q | -s] x y z pythonProg.py: error: too few arguments ”argumentsが少ない”というエラーなのでしょうが、引数を3つ以外でも総和を計算できるようにすることはできますでしょうか? 現在のソースコード内容な下記のような感じです。 (pythonProg.pyのファイル内容) import argparse parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group() group.add_argument("-v", "--verbose", action="store_true") group.add_argument("-q", "--quiet", action="store_true") group.add_argument("-s", "--sum", action="store_true") parser.add_argument("x", type=int, help="the base") parser.add_argument("y", type=int, help="the exponent") parser.add_argument("z", type=int, help="the exponent") args = parser.parse_args() answer = args.x+args.y answer02 = args.x+args.y+args.z (中略) どうぞ、宜しくお願い致します。

  • キャストの仕方(std::stringをconst char*へ)を教えてください。

    c++で作成したものをコンパイルしたところ、 下記のようなエラーメッセージが表示されました。 cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int stat(const char*, stat*) 自分の解釈では、 stat関数の第1引数がconst char*なのに、 プログラムの中では  #include <sys/types.h>  #include <sys/stat.h>  using namespace std;   :  string aaa;   :  struct stat st;  if(stat(aaa,&st)!=-1){・・・   : という感じで記述しているので、 型が変換できない という感じのことを言っているのかなぁ・・・? と思っているのですが、間違いですか? また、間違えていないとしたら・・・、 このstringで宣言しているaaaをchar*(?)にキャストする方法 と言いますか、このエラーを解決する方法を教えてください。 毎度のことですが、理解不十分で、質問の意味が通じにくいかも しれませんが、どうか宜しくお願いいたします。m(_ _)m