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(); }
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(); }
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); } }
/// <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); }
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); } }
// 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); } }
// 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); } }