Beispiel #1
0
        private void SetWaveFile(string fileName)
        {
            WaveReader waveReader = new WaveReader(fileName);

            samples    = (from samp in waveReader select samp[0]).ToArray();
            sampleRate = (int)waveReader.SampleRate;
            waveReader.Close();
        }
Beispiel #2
0
        private static void Wav2Vox(string inFile, string outFile, int samplesPerSec, bool isResample)
        {
            WaveReader wr     = new WaveReader(File.OpenRead(inFile));
            IntPtr     format = wr.ReadFormat();

            byte[] data = wr.ReadData();
            wr.Close();
            WaveFormat wf = AudioCompressionManager.GetWaveFormat(format);

            if (wf.wFormatTag != AudioCompressionManager.PcmFormatTag)//Decode if not PCM data
            {
                Decode2Pcm(ref format, ref data, ref wf);
            }
            if (isResample && wf.nSamplesPerSec != samplesPerSec)
            {
                Resample(ref format, ref data, ref wf, samplesPerSec);
            }
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(outFile));
            BinaryReader br = new BinaryReader(new MemoryStream(data));

            Vox.Raw2Vox(br, bw, wf.wBitsPerSample);
            br.Close();
            bw.Close();
        }
Beispiel #3
0
        private void ConvertToMp3(string AudioFileName, string Mp3FileName)
        {
            string wavFile = AudioFileName;
            string mp3File = Mp3FileName;

            using (WaveReader wr = new WaveReader(File.OpenRead(wavFile)))
            {
                IntPtr pcmFormat = wr.ReadFormat();
                byte[] pcmData   = wr.ReadData();
                wr.Close();

                WaveFormat wf = AudioCompressionManager.GetWaveFormat(pcmFormat);
                if (wf.wFormatTag != AudioCompressionManager.PcmFormatTag)//Decode if not PCM data
                {
                    Decode2Pcm(ref pcmFormat, ref pcmData, ref wf);
                }
                IntPtr webFormat = AudioCompressionManager.GetCompatibleFormat(pcmFormat,
                                                                               AudioCompressionManager.MpegLayer3FormatTag);
                byte[] webData = AudioCompressionManager.Convert(pcmFormat, webFormat,
                                                                 pcmData, false);
                MemoryStream ms = new MemoryStream();
                using (WaveWriter ww = new WaveWriter(ms,
                                                      AudioCompressionManager.FormatBytes(webFormat)))
                {
                    ww.WriteData(webData);
                    using (WaveReader wr2 = new WaveReader(ms))
                    {
                        using (FileStream fs = File.OpenWrite(mp3File))
                        {
                            wr2.MakeMP3(fs);
                        }
                    }
                }
                File.Delete(AudioFileName);
            }
        }
Beispiel #4
0
 private static void Wav2Vox(string inFile, string outFile, int samplesPerSec, bool isResample)
 {
     WaveReader wr = new WaveReader(File.OpenRead(inFile));
     IntPtr format = wr.ReadFormat();
     byte[] data = wr.ReadData();
     wr.Close();
     WaveFormat wf = AudioCompressionManager.GetWaveFormat(format);
     if (wf.wFormatTag != AudioCompressionManager.PcmFormatTag)//Decode if not PCM data
     {
         Decode2Pcm(ref format, ref data, ref wf);
     }
     if (isResample && wf.nSamplesPerSec != samplesPerSec)
     {
         Resample(ref format, ref data, ref wf, samplesPerSec);
     }
     BinaryWriter bw = new BinaryWriter(File.OpenWrite(outFile));
     BinaryReader br = new BinaryReader(new MemoryStream(data));
     Vox.Raw2Vox(br, bw, wf.wBitsPerSample);
     br.Close();
     bw.Close();
 }
        /// <summary>
        /// 音声ファイルを開き、生成された特徴ベクトルのリストを返す
        /// </summary>
        /// <param name="waveFilePath">WAVEファイルのフルパス</param>
        /// <param name="discriminator">識別器<para>識別させない場合は省略して下さい。</para></param>
        /// <param name="threshold">棄却レベル<para>識別のさせる場合、この値を下回ると識別結果をUnknownと判定します。</para></param>
        /// <returns>
        /// 生成された特徴ベクトルのリスト
        /// <para>識別器を指定している場合は、識別結果を添付します。</para>
        /// </returns>
        public List <Result> GenerateFeatureList(string waveFilePath, Discriminator discriminator = null, double threshold = 0.0)
        {
            var ans = new List <Result>(0);                                                          // 結果を格納する

            if (System.IO.File.Exists(waveFilePath))
            {
                WaveReader wave_file = new WaveReader();
                wave_file.Open(waveFilePath);                                                       // waveファイルを開く
                if (wave_file.IsOpen)
                {
                    try
                    {
                        this.Lock = true;
                        this.SetGenerator(wave_file);
                        this._generator.Log = this.Log;
                        DFT fft = new DFT(this.ReadAmount, Window.WindowKind.Hanning);              // FFTを実施する準備
                        while (wave_file.IsOpen && wave_file.ReadLimit == false)                    // 読めるなら、全て読むまでループ
                        {
                            MusicData data = wave_file.Read(this.ReadAmount);                       // ファイルからread_size_sec秒間読み込み。
                            double[]  sound;
                            if (data.UsableCH == MusicData.UsableChannel.Left)                      // データの入っている方を格納する
                            {
                                sound = data.GetData(MusicData.Channel.Left);                       //
                            }
                            else
                            {
                                sound = data.GetData(MusicData.Channel.Right);
                            }
                            FFTresult result = fft.FFT(sound, (double)wave_file.SamplingRate);      // FFTを実行. FFTサイズが音声データよりも小さい場合、始めの方しか処理されないので注意.
                            this._generator.Add(result);
                            if (this._generator.Ready)
                            {
                                //Console.WriteLine("検出したようです。");                          // デバッグモードで動かしながら確認するためのコンソール出力
                                Result feature = this._generator.GetFeature();                      // 特徴ベクトル生成
                                if (discriminator == null)
                                {
                                    ans.Add(feature);                                               // 答えを格納
                                }
                                else
                                {
                                    Discriminator.IDandLikelihood id = discriminator.Discriminate(feature.FeatureVector);
                                    string name = id.ID;
                                    if (id.Likelihood < threshold)
                                    {
                                        name = "Unknown";
                                    }
                                    feature.DiscriminationResult = name;
                                    if (!(this.MatchOnlyAtDiscrimination == true && name != feature.FilterName))
                                    {
                                        ans.Add(feature);
                                    }
                                }
                            }
                        }
                    }
                    catch (SystemException e)
                    {
                        throw new Exception(e.Message);
                    }
                }
                else
                {
                    throw new Exception("Waveファイルを開くことができませんでした。\nWaveReaderクラスエラーメッセージ:" + wave_file.ErrorMessage);
                }
                wave_file.Close();                                                              // waveファイルを閉じる
            }
            this.Lock = false;
            return(ans);
        }
Beispiel #6
0
        private void ConvertToCCITT(String f, String FileName)
        {
            try
            {
                WaveReader newWr      = new WaveReader(File.OpenRead(f));
                IntPtr     oldPcm     = newWr.ReadFormat();
                byte[]     oldPcmData = newWr.ReadData();
                IntPtr     newFormat  = AudioCompressionManager.GetPcmFormat(1, 16, 8000);
                byte[]     newData    = { };

                WaveFormat wf = AudioCompressionManager.GetWaveFormat(oldPcm);

                newWr.Close();

                if (FileName != "0")
                {
                    f = FileName;
                }

                if (File.Exists(textBox1.Text + Path.GetFileName(f)))
                {
                    File.Delete(textBox1.Text + Path.GetFileName(f));
                }

                // **** debug ****
                //txtStatus.Text += f + eol;

                int samp = wf.nSamplesPerSec;
                int bps  = wf.wBitsPerSample;

                // sample rate is > 8000
                if (samp > 8000)
                {
                    newData = AudioCompressionManager.Resample(oldPcm, oldPcmData, newFormat);
                }

                IntPtr     ccittOut  = AudioCompressionManager.GetCompatibleFormat(newFormat, AudioCompressionManager.MuLawFormatTag);
                byte[]     finalData = AudioCompressionManager.Convert(newFormat, ccittOut, newData, false);
                WaveWriter finalWr   = new WaveWriter(File.Create(textBox1.Text + Path.GetFileName(f)),
                                                      AudioCompressionManager.FormatBytes(ccittOut));

                finalWr.WriteData(finalData);
                finalWr.Close();

                // **** debug *****
                //TextOps(dirUlaw + Path.GetFileName(f) + eol2);

                //DeleteFile(f);
            }
            catch (NullReferenceException nex)
            {
                //TextOps("NullReferenceException: " + nex.Message.ToString() + cr);
            }
            catch (IOException iex)
            {
                //TextOps("IOException: " + iex.Message.ToString() + cr);
            }
            catch (AudioException ex)
            {
                //TextOps("AudioException: " + ex.Message.ToString() + cr);
            }
        }
Beispiel #7
0
        // CONVERT TO PCM 8KHz 16-bit mono
        private void ConvertToPcm(String f, String FileName)
        {
            try
            {
                WaveReader wr        = new WaveReader(File.OpenRead(f));
                IntPtr     oldFormat = wr.ReadFormat();
                byte[]     oldData   = wr.ReadData();
                IntPtr     newFormat = AudioCompressionManager.GetPcmFormat(1, 16, 8000);
                byte[]     newData   = { };
                WaveFormat wf        = AudioCompressionManager.GetWaveFormat(oldFormat);

                wr.Close();

                if (FileName != "0")
                {
                    f = FileName;
                }

                if (File.Exists(textBox1.Text + Path.GetFileName(f)))
                {
                    File.Delete(textBox1.Text + Path.GetFileName(f));
                }

                // **** debug ****
                //txtStatus.Text += f + eol;

                int samp = wf.nSamplesPerSec;
                int bps  = wf.wBitsPerSample;

                // sample rate is > 8000
                if (samp > 8000)
                {
                    newData = AudioCompressionManager.Resample(oldFormat, oldData, newFormat);
                    WaveWriter ww = new WaveWriter(File.Create(textBox1.Text + Path.GetFileName(f)),
                                                   AudioCompressionManager.FormatBytes(newFormat));
                    ww.WriteData(newData);
                    ww.Close();

                    // **** debug *****
                    //TextOps(dirPcm + Path.GetFileName(f) + eol2);
                }
                else
                {
                    //TextOps(Path.GetFileName(f) + " already exists at 8KHz" + cr);
                }

                //DeleteFile(f);
            }
            catch (NullReferenceException nex)
            {
                //TextOps("NullReferenceException: " + nex.Message.ToString() + cr);
            }
            catch (IOException iex)
            {
                //TextOps("IOException: " + iex.Message.ToString() + cr);
            }
            catch (AudioException ex)
            {
                //TextOps("AudioException: " + ex.Message.ToString() + cr);
            }
        }
Beispiel #8
0
        // convert to MP3
        private void ConvertToMP3(String f, String FileName, int LocType)
        {
            try
            {
                WaveReader wr        = new WaveReader(File.OpenRead(f));
                IntPtr     oldFormat = wr.ReadFormat();
                byte[]     oldData   = wr.ReadData();
                wr.Close();

                if (FileName != "0")
                {
                    f = FileName;
                }

                // if voip, write to voip dir otherwise write to MP3 (N7 & iLink) dir
                if (LocType == 2)
                {
                    textBox1.Text = textBox2.Text;
                }
                else
                {
                    textBox1.Text = textBox1.Text;
                }

                if (File.Exists(textBox1.Text + Path.GetFileName(f)))
                {
                    File.Delete(textBox1.Text + Path.GetFileName(f));
                }
                //txtStatus.Text += f + eol;

                IntPtr pcmFormat = AudioCompressionManager.GetCompatibleFormat(oldFormat,
                                                                               AudioCompressionManager.PcmFormatTag);
                byte[] pcmData = AudioCompressionManager.Convert(oldFormat, pcmFormat, oldData, false);

                IntPtr mp3Format = AudioCompressionManager.GetMp3Format(1, 112, 44100);

                f = f.Replace("wav", "mp3");

                Mp3Writer mw = new Mp3Writer(File.Create(textBox1.Text + Path.GetFileName(f)));

                byte[] newData = AudioCompressionManager.Convert(pcmFormat, mp3Format, oldData, false);
                mw.WriteData(newData);
                mw.Close();

                // **** debug *****
                //TextOps(dirMp3 + Path.GetFileName(f) + eol2);

                //DeleteFile(f);
            }
            catch (NullReferenceException nex)
            {
                //TextOps("NullReferenceException: " + nex.Message.ToString() + cr);
            }
            catch (IOException iex)
            {
                //TextOps("IOException: " + iex.Message.ToString() + cr);
            }
            catch (AudioException ex)
            {
                //TextOps("AudioException: " + ex.Message.ToString() + cr);
            }
        }