Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: [ Solved ] Thay đổi "sample rate" của file wav

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    1

    Unhappy [ Solved ] Thay đổi "sample rate" của file wav

    Hiện nay mình đang có 1 vấn đề về thay đổi tần số ( sample rate) của file wav.
    Vậy ai đã từng gặp đề tài này rồi hoặc có biết về nó thì giúp mình với, mình không biết phải bắt đầu từ đâu.

  2. #2
    Ngày gia nhập
    05 2008
    Bài viết
    3

    Vấn đề trước hết bạn cần biết cấu trúc của file *.wav thế nào đã. Ở đây xin nêu qua về .wav chuẩn PCM, chỉ cần chú ý 44 bytes đầu là các trường header của .wav( rõ hơn bạn có thể xem ở đây: http://ccrma.********.edu/courses/42...ts/WaveFormat/)
    Sau đây là code C#: Với file đầu vào là filein, ra là out.

    Visual C# Code:
    1.   private void change_samplerate(uint new_samplerate, string filein, string fileout)
    2.         {
    3.             byte[] buff = new byte[0x18]; //cap phat vung nho 24 bytes
    4.  
    5.             FileStream input = new FileInfo(filein).OpenRead(); // Loi goi doc file
    6.             BinaryReader binRead = new BinaryReader(input);
    7.  
    8.             input.Seek(4, System.IO.SeekOrigin.Begin);
    9.             uint Chunksize = binRead.ReadUInt32();         //kich thuoc du lieu(bytes) khong tinh 8 bytes dau
    10.  
    11.             input.Seek(32, System.IO.SeekOrigin.Begin);
    12.             ushort BlockAlign = binRead.ReadUInt16();      //kich thuoc mot mau(tinh theo bytes)
    13.  
    14.  
    15.             byte[] buff_end = new byte[(int)(Chunksize - 24)];
    16.             uint new_byterate = (uint)new_samplerate * BlockAlign;
    17.  
    18.             input.Seek(0, System.IO.SeekOrigin.Begin);
    19.             input.Read(buff, 0, 24);
    20.  
    21.             input.Seek(32, System.IO.SeekOrigin.Begin);
    22.             input.Read(buff_end, 0, (int)(Chunksize - 24));
    23.             input.Close();
    24.  
    25.             FileStream output = new FileInfo(fileout).Open(FileMode.Create);
    26.             output.Write(buff, 0, 24);            //bat dau ghi 24 byte
    27.             BinaryWriter writeout = new BinaryWriter(output);
    28.             writeout.Write(new_samplerate);       // 4 byte
    29.             writeout.Write(new_byterate);         // 4 byte
    30.             output.Write(buff_end, 0, (int)(Chunksize - 24));//ket thuc ghi
    31.             output.Close();
    32.         }
    chương trình: http://www.mediafire.com/?niidiggmf5z



    Lưu ý: bỏ code vào trong tag code.
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 25-09-2008 lúc 03:51 PM.

Các đề tài tương tự

  1. nghĩa của 3 từ "principals", "artifacts", "securables" là như thế nào?
    Gửi bởi ntbao trong diễn đàn English for IT | Tiếng anh cho dân CNTT
    Trả lời: 2
    Bài viết cuối: 02-09-2017, 06:36 PM
  2. Bài tập C lỗi "syntax error" trong file định dạng lại kiểu dữ liệu "types.h"
    Gửi bởi grandthorn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 10-09-2011, 07:29 AM
  3. Problems : " recover tree " with input as " preorder" and "inorder"
    Gửi bởi HoangManhHa1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 13-04-2011, 10:19 PM
  4. Lập trình C chuyển bài toán "tổng số nguyên tố" sang "xuất nhập file"
    Gửi bởi long221091 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 23-04-2010, 11:11 PM
  5. [ Solved ]Lỗi "Function "gets" should have a prototype" !
    Gửi bởi hongqb trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 26-11-2008, 05:45 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn