2012-01-02 7 views
2

Android用モノラルを使用してボイスを録音する方法が不思議です。私はAndroidの下で音声を録音するためのさまざまな素材を見てきましたが、いずれもMonoバージョンのトピックをカバーしていないようです。Android用モノラル - ボイスレコーディング

ありがとうございました。

答えて

4

ここでは、デフォルトのaudiorecorderを使用し、オーディオを.3gp形式で記録する基本的な例を示します。 2つのボタンと、オーディオを録音するときにタイマーを表示するテキストビューを備えたアクティビティがあります。

活動(AudoRecorderActivity.cs):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using System.Timers; 
using System.Threading; 

namespace App.MonoDroid { 
    [Activity (Label = "Record Audio")] 
    public class AudioRecorderActivity : Activity { 
     Button btnStart; 
     Button btnStop; 
     public TextView tvTime; 
     private System.Timers.Timer tm; 
     private TimeSpan m_offset; 
     private DateTime m_startTime; 
     private const string STOPWATCH_ZERO = "00:00:00"; 
     AudioRecorder rec; 
     private string FileName; 
     bool isStarted = false; 

     protected override void OnCreate (Bundle bundle) 
     { 
      base.OnCreate (bundle); 
      SetContentView (Resource.Layout.audiorecorder); 
      btnStart = FindViewById<Button> (Resource.Id.btnStart); 
      btnStart.Click += new EventHandler (btnStart_Click); 
      tvTime = FindViewById<TextView> (Resource.Id.tvTimer); 
      btnStop = FindViewById<Button> (Resource.Id.btnStop); 
      btnStop.Click += new EventHandler (btnStop_Click); 
      m_offset = new TimeSpan (0); 
      m_startTime = DateTime.Now; 
      tvTime.SetText (STOPWATCH_ZERO, TextView.BufferType.Normal); 
     } 

     void btnStop_Click (object sender, EventArgs e) 
     { 
      this.Finish(); 
     } 

     void btnStart_Click (object sender, EventArgs e) 
     { 
      //Check if SD card is mounted 
      if (Android.OS.Environment.ExternalStorageState.Equals (Android.OS.Environment.MediaMounted)) { 
       if (isStarted) { 
        tm.Stop(); 
        rec.Stop(); 
        rec = null; 
        Finish(); 
       } 
       else { 
        rec = new AudioRecorder (Android.OS.Environment.ExternalStorageDirectory.AbsolutePath 
        + "/Android/data/" + this.Application.PackageName, "audiotest.3gp"); 
        m_offset = TimeSpan.Parse (tvTime.Text); 
        m_startTime = DateTime.Now; 
        tm = new System.Timers.Timer (1000.0); 
        tm.Elapsed += new ElapsedEventHandler (tm_Elapsed); 
        tm.Start(); 
        rec.Start(); 
        isStarted = true; 
        btnStart.Text = GetString ("Stop"); 
       } 
      } 
     } 

     protected override void OnPause() 
     { 
      base.OnPause(); 
      this.Save(); 
     } 

     void tm_Elapsed (object sender, ElapsedEventArgs e) 
     { 
      DisplayTime(); 
     } 

     private void DisplayTime() 
     { 
      TimeSpan elapsed = (DateTime.Now - m_startTime) + m_offset; 
      RunOnUiThread (() => tvTime.SetText (String.Format ("{0:00}:{1:00}:{2:00}", 
       (int)elapsed.TotalHours, elapsed.Minutes, elapsed.Seconds), TextView.BufferType.Normal)); 
     } 

     //Stop the activity from being rotated so that the timer/recording isn't stopped. 
     public override void OnConfigurationChanged (Android.Content.Res.Configuration newConfig) 
     { 
      base.OnConfigurationChanged (newConfig); 
      SetRequestedOrientation ((Android.Content.PM.ScreenOrientation)this.RequestedOrientation); 
     } 
    } 
} 

レイアウトファイル(audiorecorder.axml):

<?xml version="1.0" encoding="utf-8" ?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
> 

    <TextView 
    android:id="@+id/tvTimer" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="100px" 
    android:gravity="center_horizontal" 
    /> 
    <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:weightSum="100" 
    android:orientation="horizontal" 
    > 
    <Button 
     android:id="@+id/btnStart" 
     android:text="@string/Start" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="50" 
     /> 
    <Button 
     android:id="@+id/btnStop" 
     android:text="@string/CancelButton" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="50" 
     /> 
    </LinearLayout> 
</LinearLayout> 
+0

が、私はこれを試してみましょう。ちなみに、どのプログラムをUIデザイン(コントロールの構成)に使用していますか? – SharpAffair

+0

私はMonodevelopやVisual Studioで手作業でやっています。彼らはアンドロイドのアドオンのためにモノにオートコンプリートを内蔵しています。それ以外の場合は、DroidDraw http://www.droiddraw.org/を使用することができます。 – startupsmith

関連する問題