Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > .NET Framework > Forum > ส่งเสียงพูด input Mic to Output Speaker ส่งได้ไม่นาน ช่วยผมด้วยครับ แนะนำหน่อยครับ



 

ส่งเสียงพูด input Mic to Output Speaker ส่งได้ไม่นาน ช่วยผมด้วยครับ แนะนำหน่อยครับ

 



Topic : 121677



โพสกระทู้ ( 11 )
บทความ ( 0 )



สถานะออฟไลน์




SERVER (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Media;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using NAudio.Wave;

namespace ReceiverSound
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            ThreadPool.QueueUserWorkItem(startListening);
        }
        Socket hostSocket, receiveSocket, sock; Thread thread;

        private void startListening(object state)
        {
            try
            {
                receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint hostIpEndPoint = new IPEndPoint(IPAddress.Any, 9050);
                //Connection node
                receiveSocket.Bind(hostIpEndPoint);
                receiveSocket.Listen(10);
                MessageBox.Show("Start");
                hostSocket = receiveSocket.Accept();
                rec_thread = new Thread(new ThreadStart(VoiceReceive));
                rec_thread.Start();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Console.ReadKey();
            }
        }

        private NetworkStream ns;
        private Thread rec_thread;

        private void WriteBytes()
        {
            if (ns != null)
            {
                SoundPlayer sp = new SoundPlayer(ns);
                sp.Play();
            }
        }

        private void VoiceReceive()
        {

            sock = receiveSocket.Accept();
            ns = new NetworkStream(sock);

            WriteBytes();
            receiveSocket.Close();

            while (true)
            {
                VoiceReceive();
            }

        }
        public static TimeSpan GetSoundLength(string fileName)
        {

            WaveFileReader wf = new WaveFileReader(fileName);
            return wf.TotalTime;

        }
    }
}


CLIENT (C#)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Media;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using NAudio.Wave;

namespace SendSound
{
    class voice
    {
        private string ip;
        private string path = Application.StartupPath + "\\buffer.wav";

        public string Ip
        {
            get { return ip; }
            set { ip = value; }
        }
        private int port;
        public int VPort
        {
            get { return port; }
            private set { port = value; }
        }
        private DirectSoundOut waveOut = null;
        private WaveIn sourceStream = null;
        private Byte[] Data_ary;
        private WaveFileWriter waveWriter = null;
        private System.Windows.Forms.Timer c_v = null;
        private Socket connector;

        public void Send(string ip, int port)
        {
            this.Ip=ip;
            this.VPort = port;
            
            //timemer
            c_v = new System.Windows.Forms.Timer();
            c_v.Interval = 2000;
            c_v.Enabled = false;
            c_v.Start();

            //send
            c_v.Tick += c_v_Tick;
            Recordwav();
            
        }

        private void Recordwav()
        {
            sourceStream = new WaveIn();
            int devicenum = 0;
          //  SaveFileDialog save = new SaveFileDialog();
          //  save.Filter = "Wave File (*.wav)|*.wav;";
            for (int i = 0; i < NAudio.Wave.WaveIn.DeviceCount; i++)
            {
                if (NAudio.Wave.WaveIn.GetCapabilities(i).ProductName.Contains("icrophone"))
                    devicenum = i;
            }
            sourceStream = new NAudio.Wave.WaveIn();
            sourceStream.DeviceNumber = devicenum;
            sourceStream.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(devicenum).Channels);
            sourceStream.DataAvailable += new EventHandler<WaveInEventArgs>(sourceStream_DataAvailable);
            WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourceStream);
            waveWriter = new WaveFileWriter(path, sourceStream.WaveFormat);


            //waveOut = new NAudio.Wave.DirectSoundOut();
           // waveOut.Init(waveIn);

            sourceStream.StartRecording();
            c_v.Start();
            

        }
        void c_v_Tick(object sender, EventArgs e)
        {
            this.Dispose();
            Send_Bytes();
        }
        private void Send_Bytes()
        {
            Data_ary = File.ReadAllBytes(path);


            connector = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint ie = new IPEndPoint(IPAddress.Parse(this.Ip), this.VPort);
            ie.Address = IPAddress.Loopback;
            connector.Connect(ie);

            connector.Send(Data_ary, 0, Data_ary.Length, 0);
            connector.Close();
            Recordwav();
        }

        private void sourceStream_DataAvailable(object sender, WaveInEventArgs e)
        {
            if (waveWriter == null) return;

            waveWriter.WriteData(e.Buffer, 0, e.BytesRecorded);

            waveWriter.Flush();

        }


     
        //not used here but its useful to get the length of wav file
        public static TimeSpan GetSoundLength(string fileName)
        {

            WaveFileReader wf = new WaveFileReader(fileName);
            return wf.TotalTime;

        }
        private void Dispose()
        {
            c_v.Stop();
            if (sourceStream != null)
            {
                sourceStream.StopRecording();
                sourceStream.Dispose();
            }
            if (waveWriter != null)
            {
                waveWriter.Dispose();

            }
            GC.SuppressFinalize(this);
        }
    }
 }



มันหยุด reccord ไปเสียก่อน ผมว่าน่าจะเป็นที่ timer ข้อความกรุณา แนะนำหน่อยครับ อยากให้ส่งเสียง ได้ไม่หลุด



Tag : .NET, Win (Windows App), C#







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-02-29 23:45:15 By : zeuszerome View : 920 Reply : 3
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

Quote:
c_v.Interval = 2000;


ปรับค่าตัวนี้หรือเปล่าครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-02 09:06:13 By : mr.win
 


 

No. 2



โพสกระทู้ ( 11 )
บทความ ( 0 )



สถานะออฟไลน์


ลองปรับดูแล้วครับ c_v.Interval = 2000;
2000 คือ สองวินาที ผลที่ได้เหมือนเดิมครับ คือ เหมือนมันส่งข้อมุลไม่ทัน record
มีอะไรที่ใช้แทน timer ได้ป่าวครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-02 18:57:09 By : zeuszerome
 

 

No. 3



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ลองปรับมากกว่านี้ได้หรือเล่าครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-03 09:03:20 By : mr.win
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ส่งเสียงพูด input Mic to Output Speaker ส่งได้ไม่นาน ช่วยผมด้วยครับ แนะนำหน่อยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่