音メディア処理研究室

 
デモ大会

C#を用いた最大電圧レベル表示機能付き音声変換器

今回、初めてのデモ大会において、C#を用いて最大電圧レベル表示機能付きの音声変換器を作成しました。

・背景・目的

  • 近年では、様々な場面において音声変換技術は用いられている。
  • その技術にて欠かせない要素として、ピッチ、フォルマント、話速などが挙げられる。
  • 音声データから、まず正確にデータを取り出しそれを加工できればよいのではないか?

・デモ内容

  • 既に録音したwavデータを用いて、ヒルベルトフィルタを用いて任意の周波数分だけシフトし、その変換した波形を出力する。
  • 変換処理と同時に入力信号と出力信号の音声データから変換前と変換後の最大電圧レベルを表示する。

・工夫した点

  • 変換させたい分の周波数の値の入力方法を、シフタ―とテキストボックスの2種類用意し、任意入力をできるようにした。
  • 最大電圧レベルの表示をグラフ表示にして、視覚的に見やすくした。

・今後の改善点

  • 録音機能の追加

→WindowsのAPIを用いて実装を試みたが今回はうまくいかなかった

  • フォルマントを調整できる機能の追加

→フォルマントの抽出方法を理解し、それを加工できるようにしたい

・参考文献

C#によるディジタル信号処理プログラミング 三上直樹 工学社

・ビデオ

Juliusを気軽に使える音声認識システム

C#で簡単に音声認識がしたい!ということで、さっそく作成してみました。

■システム構成

  • 開発言語・・・C#
  • OS   ・・・Windows7
  • アプリケーション開発環境・・・Visual Studio Professional 2013
  • 音声認識エンジン・・・Julius
  • ■Juliusの使用方法

    Juliusはコマンドプロンプト上で実行可能です。実行コマンドは下記のようになっています。

    コマンド例:”julius –C am-gmm.jconf”

    バッチファイルにコマンドを記述しておけば、バッチファイルを起動するだけで、音声認識ができるようになります。

  • バッチファイル
  •    Windowsでコマンドプロンプトに行わせたい命令列をテキストファイルに記述したもの。

    ■システム概要

     今回、Juliusの便利なオプションをそのまま使用するためにプログラムに直接組み込むのではなく、Juliusを起動させる部分はすべてバッチファイルで作成しています。C#ではバッチファイルの起動と出力結果の読み込みしかしていません。
     作成した音声認識システムの起動画面は図1のようになっています。起動画面が立ち上がったら、”音声認識開始”ボタンを押します。すると出力結果欄に”please speak”と表示されますので、マイクに向かって発話してください。認識結果は出力結果欄に出力されます。図1では「こんにちは」と発話したときの実行例となっています。出力結果欄に「こんにちは。」と出力されているのが確認できます。

    音声認識システム

    図1 音声認識システムの使用例

    <参考文献>

    • DOSコマンドを実行し出力データを取得する[DOBON.NET プログラミング道]  (http://dobon.net/vb/dotnet/process/standardoutput.html)

    OpenJTalkを気軽に使える音声合成システム

    C#で簡単に音声合成がしたい!ということで、さっそく作成してみました。

    ■システム構成

  • 開発言語・・・C#
  • OS   ・・・Windows7
  • アプリケーション開発環境・・・Visual Studio Professional 2013
  • テキスト音声合成エンジン・・・OpneJTalk
  • ■OpneJTalkの使用方法

    OpenJTalkはコマンドプロンプト上で実行可能です。実行コマンドは下記のようになっています。

    コマンド例:”bin\open_jtalk -z 2000 -m voice\hts_voice_nitech_jp_atr503_m001\nitech_jp_atr503_m001.htsvoice -ow talk.wav talk.txt”

    バッチファイルにコマンドを記述しておけば、バッチファイルを起動するだけで、音声合成ができるようになります。

  • バッチファイル
  •    Windowsでコマンドプロンプトに行わせたい命令列をテキストファイルに記述したもの。

    ■システム概要

     今回、OpneJTalkの便利なオプションをそのまま使用するためにプログラムに直接組み込むのではなく、OpneJTalkを起動させる部分はすべてバッチファイルで作成しています。C#ではバッチファイルの起動と出力結果の読み込みしかしていません。
     作成した音声合成システムの起動画面は図1のようになっています。起動画面が立ち上がったら、入力フォームに音声合成させたい言葉を入力します。その後、”音声合成開始”ボタンを押してください。すると出力結果欄に”再生開始”と表示されると同時に音声が再生されます。図1では「こんにちは。」と発話させたいときの実行例となっています。

    音声合成

    図1 音声合成システムの使用例

    <参考文献>

    • DOSコマンドを実行し出力データを取得する[DOBON.NET プログラミング道]  (http://dobon.net/vb/dotnet/process/standardoutput.html)

    ゲームアプリ「フリックドロイド」

    サンプルプログラムを変更し、Androidゲームアプリを作成しました。

    変更点は以下のとおりです。

    • アプリ起動後にスタート画面を追加
    • 蜂の種類を増やし、得点をそれぞれ変更(黄色の蜂が1点、緑色の蜂が3点)
    • 爆弾を追加(マイナス5点)
    • 一時停止・リトライ機能を追加
    • ドロイド君の減速
    • ドロイド君などが画面の端で跳ね返る

     

    ゲームの内容としては、制限時間30秒以内にドロイド君をフリックして操作し、蜂を消していくゲームです。

    蜂を消すとスコアがあがっていきます。蜂は2種類いて黄色の蜂が1点、緑色の蜂が3点です。

    爆弾に当たってしまうとマイナス5点となります。

    詳しいゲームの様子は以下の動画をご覧ください。

     

    開発環境:eclipse

    使用デバイス:Android

    サンプルプログラムは

    「10日でおぼえるAndroidアプリ開発入門教室 第2版」寺園聖文 (著)/ 翔泳社 (出版社)

    のプログラムを使用させていただきました。

    おさぼり防止ロボット「T.BUSTER」

    2014年12月19日に行われた3年生デモ大会での発表内容です。
    今回のデモではPCでの作業中において、ユーザの居眠りを防止してくれるシステムを発表しました。

    ディスプレイに対面しているユーザをKinectを用いてフェイストラッキングを行い、顔認証が外れた時に「ユーザがサボっている」と認識します。一定時間サボっている場合はMindstormNXTが動作してユーザへの警告を行うようにしました。

    使用した環境、機材
    ・Windows7
    ・Visual Studio 2010
    ・MindStormNXT
    ・Kinect for Windows
    ・Kinect for Windows SDK v 1.8

    詳しい説明や実際の動作は以下の動画でご覧ください。

    音声認識APIを用いたアプリ

    今回はグーグルが無料で提供している音声認識APIを利用して、以下の動作ができるアプリを作成しました。

    ・音声録音
    ・発表の順番抽選
    ・日にちを教えてくれる
    ・時刻を教えてくれる

    ——————————————————————–
    開発環境
    → eclipse 4.2
      android 4.2.2

    参考文献
    → 「10日でおぼえる Androidアプリ開発入門教室 第2版」
    ——————————————————————–

    詳細は以下の動画をご覧ください。

    Android音楽再生アプリ「ふりっくま」

    Android端末で音楽を再生するアプリ「ふりっくま」を作成しました。

    アプリの簡単な内容は以下の通りです。

    • 8方向のフリックを検知して、それぞれの方向に対応した曲を再生
    • 画面を長押しすると曲が一時停止

     

    また、今回はフリー素材の音源を使用させていただいております。

    詳細は以下の動画をご覧ください。

     

    開発環境:eclipse バージョン4.2

    使用デバイス:Android バージョン4.4.2

    参考文献: 「10日でおぼえる Androidアプリ開発入門教室 第2版」

    雑談対話iOSアプリ「トモちゃん」

    2014年12月19日に行われた人工知能第一研究室の3年生デモ大会での発表内容です。

    私は今回、雑談対話iOSアプリ「トモちゃん」と題して発表させてもらいました。

    このアプリはSiriのようにユーザが発話した内容に対して、チャット画面上で応答してくれる、というアプリです。こちらはdocomoが無料で提供してくれている雑談対話APIを利用しています。また、参考にさせていただいた資料を以下にまとめておきます。

    ・Docomo Developer support→https://dev.smt.docomo.ne.jp/

    ・ドコモの「しゃべってコンシェル」やAppleの「Siri」のようなサービスが誰でも作れる!?ドコモが提供する「雑談対話」APIを試してみた!→ http://qiita.com/asakahara/items/3c582d4073fa67ca599a

    使用した環境、機材
    ・OS X
    ・Xcode6.0.1

    実際の動作の様子、発表の内容を動画にしています。ご覧ください。

    LeapMotionを用いたEV3のジェスチャー操作

     米LeapMotion社から発売されているLeapMotionで認識できる手の動きやジェスチャーを用いてロボットを操作します。LeapMotionはUSBケーブルで、ロボットはBluetooth通信でそれぞれPCに接続しています。使用しているロボットはレゴ社が発売している教育用ロボット”LegoMindstormEV3”です。

    http://youtu.be/9pOS0eGaUr0

    ■システム構成

  • 開発言語・・・C#
  • OS    ・・・Windows7
  • アプリケーション開発環境・・・Visual Studio Professional 2013
  • センサ ・・・LeapMotionController
  • ロボット・・・LegoMindstormEV3
  • LeapMotionSDK 2.1.6+23110
  • LEGO MINDSTORMS EV3 API v1.0 (https://legoev3.codeplex.com/)
  •  

    ■システム概要

     LeapMotionから読み取った手の座標を利用してロボットのモータパワーを決定し、ロボットに送信します。システムの流れは図1のようになります。モータパワーの算出方法は図2のようになります。

    LeapMotion_操作図2

    図1 システムの概要図

    LeapMotion_MotorPower

    図2 手の位置からのモータパワーの算出

    <参考文献>

    • LegoMindstormsEV3  (http://www.afrel.co.jp/lineup/mindstorm-ev3)
    • Kinect×教育版LEGOMindstormsEV3 開発ガイドブック (同上)
    • LEGOMINDSTORMS EV3 API (http://legoev3.codeplex.com/)
    • LEAPMOTION  (https://www.leapmotion.com/?lang=jp)
    • LEAPMOTION Developer Portal (https://developer.leapmotion.com/)
    • LeapMotionDeveloperSDKで開発できる環境を整える(WindowsC#編)(http://www.naturalsoftware.jp/blog/8389)
    • LeapMotionで指の先を画面に表示する(https://code.msdn.microsoft.com/windowsdesktop/LeapMotion-c52eb8a8)

     

    音声データを扱ったゲーム

    2014年12月19日に行われた3年生デモ大会での発表内容です。
    今回のデモでは音声データ(今回は.wavと.mp3データやマイク)を読み込みスピーカやマイクを移動させていくゲームを作成した。

     スピーカは音量によって高さが変化するように作り、マイクは声の高さ(周波数)の高さによって操作できるようにゲームを作成していった。
    音符の速度は一定速度で進んでいくように設定していった。

    使用した環境
    ・Windows7
    ・processing-2.2.1-windows64bit

    実際の動作は以下の動画に載せます。

    Q.なぜ音量が大きいときに音符の間隔を狭くしていくように設定したのか
    A.音量が大きいときは、曲が盛り上がっていると判断し、盛り上がっているときは音符の数を増やしていったほうがゲームとして楽しくなると考えたためである。

    Q.なぜ300Hzで一番上の位置近くに行くように設定したのか
    A.300Hzは3オクターブのDとD#の声の間にあり、テノールはC3~C5の範囲の声域を持ち、普段の生活で300Hz以上の声を出す機会がないと考え、今回は300Hz程度で一番上に行くように設定した。

    まとめ
    今回は声を出すということを用いてマイクを操作する方法を採ったが、実際に操作するとなるとマイクの位置が不安定になり、理想的な場所に持っていけないなどの問題があったので、ゲームとして楽しむためにはマイクの操作性について検討していく必要があると感じた。

    補足
    ゲームとして楽しむために点数を出すようにしたり、最後にクリア画面などを出すようにした。