苏飞论坛

标题: 利用DirectX写的录音机软件怎么才能再次录音? [打印本页]

作者: 十九天    时间: 2013-8-9 10:59
标题: 利用DirectX写的录音机软件怎么才能再次录音?
本人C#新手,前些天在DirectX基础上用C#写了个录音软件,但是不知为什么不能够第二次录音,就是在结束第一次录音后只有关闭后重新调试才能够再次录音,否则会出现异常。怎么样才能够不关闭调试情况下再次录音?using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


using System.Threading;
using System.IO;
using Microsoft.DirectX;
using Microsoft.DirectX.DirectSound;


namespace SoundRecord
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            label2.Text = "录音状态—准备录音";
        }


        private SoundRecord recorder = new SoundRecord();


        int hourStart, minuteStart, secondStart;////用于存储开始时刻的时分秒
        private void btnStart_Click(object sender, EventArgs e)
        {  
            hourStart = DateTime.Now.Hour;      ////获取开始时刻的系统当前时间
            minuteStart = DateTime.Now.Minute;
            secondStart = DateTime.Now.Second;
            string wavfile = "test.wav";   
            recorder.SetFileName(wavfile);
            recorder.RecStart();////录音开始
            timer1.Start();////计时开始


        }


        private void btnStop_Click(object sender, EventArgs e)
        {
            timer1.Stop();////计时结束
            label2.Text = "录音状态—录音结束";
            try
            {
                recorder.RecStop();////录音结束
            }
            catch (Exception ex)
            {
                MessageBox.Show("请不要直接或者连续点击停止按钮!");
                return;
            }
            recorder = null;
        }


        private void timer1_Tick(object sender, EventArgs e)
        {
            int i1, i2, i3;
            i1 = DateTime.Now.Hour - hourStart;
            i2 = DateTime.Now.Minute - minuteStart;
            i3 = DateTime.Now.Second - secondStart;
            if (i3 < 0)
            {
                i3 = i3 + 60;
                i2 = i2 - 1;
            }
            label2.Text = "录音状态—正在录音:" + i1.ToString() + ":" + i2.ToString() + ":" + i3.ToString();                     
        }
    }
}
还有个SoundRecord.cs文件(在网上下载,太长,此处放不下了),其中录音开始和停止都是在这里面的,希望大神能够指点啊!


作者: 站长苏飞    时间: 2013-8-9 17:48
把所有的变量和对象都从新生成,一下,就是重新New一下,应该是没有释放的原因。
重新打开其实也就是重新生成了 一次,根据这个想法找找原因
作者: 十九天    时间: 2013-8-20 17:40
站长苏飞 发表于 2013-8-9 17:48
把所有的变量和对象都从新生成,一下,就是重新New一下,应该是没有释放的原因。
重新打开其实也就是重新 ...

谢啦,这个问题已经解决了,问题在于record类全局new了,应该在开始录音时new才行!
作者: 十九天    时间: 2013-8-20 17:50
站长苏飞 发表于 2013-8-9 17:48
把所有的变量和对象都从新生成,一下,就是重新New一下,应该是没有释放的原因。
重新打开其实也就是重新 ...

站长您好!谢谢您上次给的思路,对于我的这个录音的软件,怎么才能实时显示录音的wav音频的波形文件呢?

作者: 站长苏飞    时间: 2013-8-20 17:53
你现在能获取波形文件吗?如果能当获取到了直接更新界面,可以使用线程加委托的方法。
http://www.sufeinet.com/forum.ph ... hlight=%CF%DF%B3%CC
作者: 十九天    时间: 2013-8-20 18:16
站长苏飞 发表于 2013-8-20 17:53
你现在能获取波形文件吗?如果能当获取到了直接更新界面,可以使用线程加委托的方法。
http://www.sufeine ...

现在俺就是一枚小菜鸟,用已有的wav文件绘制图形也有些困难,站长大哥,用已有的wav文件绘制图形需要用到哪些东西啊?您给指条明路吧!
作者: 站长苏飞    时间: 2013-8-20 18:28
(, 下载次数: 189)