如何制作我自己的mp3文件数据 [英] How to make my own mp3 file data

查看:93
本文介绍了如何制作我自己的mp3文件数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我对mp3文件结构进行了大量研究。我已经了解了所有关于mp3文件,包括它是如何工作的,它包含哪种类型的数据,如何读取mp3文件数据,如何编写mp3文件数据ect.now我正在尝试制作我自己的mp3文件就像我'我在文件中添加我自己的音频数据。但是在用我自己的音频数据写入文件后,它不起作用,不知道为什么?我在用c语言工作。

请不要向我推荐任何图书馆,因为我想用myown做这个。



我尝试过的:



以下是我的代码。

hello everyone,
i have done lots of research on mp3 file structure. i have understood all about mp3 file including how does it work, which type of data it consists, how to read mp3 file data ,how to write mp3 file data ect.now i'm trying to make my own mp3 file just like i'm adding my own audio data in file.but after writing file with my own audio data it doesn't work don't know why?. i'm working in c language.
and please don't suggest me any library because i want to do this with myown.

What I have tried:

below is my code.

#include<stdio.h>
#include<conio.h>
#include<string.h>

void main()
{
   FILE *fp,*pt;
   static unsigned char file_data[10000000],a[3];
   fp=fopen("expmp3file.mp3","wb");
   pt=fopen("tt.mp3","rb");
   int t=0,u=0,v=0,x=0;
   unsigned long i=0,j=0,k=0,curr_fr_siz=0,size_of_id3v2=0;
   unsigned char b=150;
   a[0]=255;
   a[1]=255;
   a[2]=251;
   a[3]=250;
   while(fread(&file_data[i],sizeof(char),1,pt)==1)
   {
       i++;
   }
   i=0;
   t=file_data[6];
   u=file_data[7];
   v=file_data[8];
   x=file_data[9];
   size_of_id3v2=t*2097152+u*16384+v*128+x+10;// Synchronization Safe Integer formula last 10 is for id3v2 tag header
   //printf("%d\n",size_of_id3v2);
   while(i<size_of_id3v2)
   {
      fwrite(&file_data[i],sizeof(file_data[i]),1,fp);// writing id3v tag from a another file
      i++;
   }
   i=0;
 curr_fr_siz=(144*(320*1000)/44100+1);
 //printf("%d",curr_fr_siz);
   while(i<4000)
   {
       while(k<4)
       {
        fwrite(&a[k],sizeof(char),1,fp);//writing frame header
        k++;
       }
       k=0;
       j=0;
       while(j<curr_fr_siz)
       {
         fwrite(&b,sizeof(b),1,fp);//writing audio data
         j++;
       }
       i++;
   }
   fclose(fp);
   fclose(pt);
   getch();

}





首先,我在文件开头的另一个文件中添加了id3v标签数据。之后我用自己的数据逐一添加了4000个mp3帧。



first of all i added id3v tag data from another file at the beginning of file. after that i have added one by one 4000 mp3 frames with my own data.

推荐答案

while(j<curr_fr_siz)
{
  fwrite(&b,sizeof(b),1,fp);//writing audio data
  j++;
}



该代码多次写入一个值,您期望它做什么?


That code is writing a single value multiple times, what do you expect it to do?


我正在回答我自己的问题。

代码如下。

i am answering my own question.
the code is below.
#include<stdio.h>
#include<conio.h>
#include<string.h>

void main()
{
   FILE *fp,*pt,*up;
   static unsigned char file_data[10000000],a[3];
   fp=fopen("mysound.mp3","wb");
   pt=fopen("tt.mp3","rb");
   int t=0,u=0,v=0,x=0;
   unsigned long i=0,j=0,k=0,z=0,y=0,curr_fr_siz=0,size_of_id3v2=0;
   unsigned char c[10],b=50;
   a[0]=255;
   a[1]=251;
   a[2]=226;
   a[3]=68;
   while(fread(&file_data[i],sizeof(char),1,pt)==1)
   {
       i++;
   }
   i=0;
   t=file_data[6];
   u=file_data[7];
   v=file_data[8];
   x=file_data[9];
   size_of_id3v2=t*2097152+u*16384+v*128+x+10;// Synchronization Safe Integer formula last 10 is for id3v2 tag header
   //printf("%d\n",size_of_id3v2);
   while(i<size_of_id3v2)
   {
      fwrite(&file_data[i],sizeof(file_data[i]),1,fp);
      i++;
   }
   i=0;

 curr_fr_siz=(144*(320*1000)/44100)+1;

   while(i<1000)
   {
       while(k<4)
       {
        fwrite(&a[k],sizeof(char),1,fp);//writing header of frame 
        k++;
       }
       k=0;
       j=0;
       while(j<curr_fr_siz-4)
       {
         srand(time(NULL));
         b=z+rand()%(256-z);//random number,z helps to produce different numbers

         fwrite(&b,sizeof(b),1,fp);//writing my own audio data 
       
         j++;
         z++;
         if(z==200)
         {
             z=1;
         }

       }
       i++;
   }
   fclose(fp);
   fclose(pt);
   getch();

}


这篇关于如何制作我自己的mp3文件数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆