Arduinoで遊ぼう - iPhoneのオーディオ端子を使って通信をする(2)
目次
イントロダクション

前回、SoftModemについてその仕組みや回路、Arduinoとの接続、ライブラリの使い方を解説しました。今回、iPhoneのソースコードの使い方について詳しく解説します。
※iPhoneアプリの開発にはXCodeとiPhone SDKが必要です。iPhone SDKは3.2以上をお使いください。
ソースコード
SoftModemTerminal
http://code.google.com/p/arms22/downloads/list?can=2&q=SoftModemTerminal+label%3AFeatured
現在、iPhoneのソースコードはフレームワーク化されておらず、SoftModemTerminalからSoftModemに関連するソースコードをコピーして使う必要があります。次のリストはSoftModemに関連するソースコードの一覧です。これらのソースコードをプロジェクトフォルダにコピーしてお使いください。
SoftModemは音声の入出力に次の2つのフレームワークを使います。これらフレームワームもプロジェクトに追加してください。
初期化
まず最初にAVAudioSessionクラス使って、アプリケーションのカテゴリを設定します。音声の録音と再生を行うので AVAudioSessionCategoryPlayAndRecord を設定します。
次に音声解析用のAudioSignalAnalyzerクラス、FSKRecognizerクラスのインスタンスを生成します。AudioSignalAnalyzer はマイクから入力された波形を解析し、波形の上がり立ち下がりエッジを検出します。FSKRecognizer は AudioSignalAnalyzer が解析した結果を元にデータビットを復元します。
次に音声出力用の FSKSerialGeneratorクラスのインスタンスを生成します。FSKSerialGenerator はデータビットを音声信号に変換し、出力します。
受信
データの受信は CharReceiver プロトコルを実装したクラスを FSKRecognizer クラスに登録することで行います。
初期化のタイミングで FSKRecognizer クラスに登録します。
データを1バイト受信すると receivedChar: メソッドが呼ばれます。
送信
送信は受信に比べてずっと簡単で、FSKSerialGenerator クラスの writeByte: メソッドで1バイト送信します。
制限

Arduinoとの接続用にコンパクトなSoftModem Breakoutボードを準備中です。うまくいけば来月ぐらいにスイッチサイエンスさんで買えるようになるかも。。
Arduinoで遊ぼう - iPhoneのオーディオ端子を使って通信をする
http://arms22.blog91.fc2.com/blog-entry-350.html
音系iPhoneアプリに興味があるかたにオススメです。これ1冊でiPhoneのオーディオ処理に関する情報がまとめて手に入ります。
- Arduinoで遊ぼう - iPhoneのオーディオ端子を使って通信をする
- Arduinoで遊ぼう - iPhoneのオーディオ端子を使って通信をする(2)
イントロダクション

前回、SoftModemについてその仕組みや回路、Arduinoとの接続、ライブラリの使い方を解説しました。今回、iPhoneのソースコードの使い方について詳しく解説します。
※iPhoneアプリの開発にはXCodeとiPhone SDKが必要です。iPhone SDKは3.2以上をお使いください。
ソースコード
SoftModemTerminal
http://code.google.com/p/arms22/downloads/list?can=2&q=SoftModemTerminal+label%3AFeatured
現在、iPhoneのソースコードはフレームワーク化されておらず、SoftModemTerminalからSoftModemに関連するソースコードをコピーして使う必要があります。次のリストはSoftModemに関連するソースコードの一覧です。これらのソースコードをプロジェクトフォルダにコピーしてお使いください。
- AudioQueueObject.h
- AudioQueueObject.m
- AudioSignalAnalyzer.h
- AudioSignalAnalyzer.m
- AudioSignalGenerator.h
- AudioSignalGenerator.m
- CharReceiver.h
- FSKModemConfig.h
- FSKRecognizer.h
- FSKRecognizer.mm
- FSKSerialGenerator.h
- FSKSerialGenerator.m
- lockfree.h
- MultiDelegate.h
- MultiDelegate.m
- PatternRecognizer.h
SoftModemは音声の入出力に次の2つのフレームワークを使います。これらフレームワームもプロジェクトに追加してください。
- AudioToolbox.framework
- AVFoundation.framework
初期化
まず最初にAVAudioSessionクラス使って、アプリケーションのカテゴリを設定します。音声の録音と再生を行うので AVAudioSessionCategoryPlayAndRecord を設定します。
AVAudioSession *session = [AVAudioSession sharedInstance];
session.delegate = self;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[session setActive:YES error:nil];
次に音声解析用のAudioSignalAnalyzerクラス、FSKRecognizerクラスのインスタンスを生成します。AudioSignalAnalyzer はマイクから入力された波形を解析し、波形の上がり立ち下がりエッジを検出します。FSKRecognizer は AudioSignalAnalyzer が解析した結果を元にデータビットを復元します。
recognizer = [[FSKRecognizer alloc] init];
analyzer = [[AudioSignalAnalyzer alloc] init];
[analyzer addRecognizer:recognizer]; //analyzerにrecognizerを登録
[analyzer record]; //音声解析開始次に音声出力用の FSKSerialGeneratorクラスのインスタンスを生成します。FSKSerialGenerator はデータビットを音声信号に変換し、出力します。
generator = [[FSKSerialGenerator alloc] init];
[generator play]; // 音声出力開始
受信
データの受信は CharReceiver プロトコルを実装したクラスを FSKRecognizer クラスに登録することで行います。
@interface MainViewController : UIViewController <CharReceiver>
初期化のタイミングで FSKRecognizer クラスに登録します。
MainViewController *mainViewController;
[recognizer addReceiver:mainViewController];
データを1バイト受信すると receivedChar: メソッドが呼ばれます。
- (void) receivedChar:(char)input
{
//受信処理
}
送信
送信は受信に比べてずっと簡単で、FSKSerialGenerator クラスの writeByte: メソッドで1バイト送信します。
[generator writeByte:0xff];
制限
- レイテンシー
音声の入出力にはAudioQueueを使用しており、20ms~100msのレイテンシーが存在します。 - プリアンブル
無信号状態が続いた場合、データ送信時に約40msのプリアンブル(高周波数搬送波)を送信します。 - 音声出力レベル(ボリューム)
S/N比を稼ぐ為にiPhone側のボリュームは最大にしてください。

Arduinoとの接続用にコンパクトなSoftModem Breakoutボードを準備中です。うまくいけば来月ぐらいにスイッチサイエンスさんで買えるようになるかも。。
Arduinoで遊ぼう - iPhoneのオーディオ端子を使って通信をする
http://arms22.blog91.fc2.com/blog-entry-350.html
音系iPhoneアプリに興味があるかたにオススメです。これ1冊でiPhoneのオーディオ処理に関する情報がまとめて手に入ります。
iPhone Core Audioプログラミング
posted with amazlet at 10.07.13
永野 哲久
ソフトバンククリエイティブ
売り上げランキング: 15849
ソフトバンククリエイティブ
売り上げランキング: 15849
