• 【多媒体技术与实践】音频信息获取和处理——编程题汇总


    1:音频信息数据量计算

    已知采样频率(单位KHz)、量化位数、声道数及持续时间(单位分钟),求未压缩时的数据量(单位MB).

    例如:

    输入: 22.05 16 2 3 (空格分隔)

    输出:15.1MB(保留小数点后一位)

    1. #include
    2. int main(){
    3. float freq,bit,path,time;
    4. scanf("%f %f %f %f",&freq,&bit,&path,&time);
    5. //cin>>freq>>bit>>path>>time;
    6. float memory=freq*1000*bit*path*time*60/8;
    7. memory/=1048576;
    8. printf("%.1fMB",memory);
    9. return 0;
    10. }

    注:此题注意最后需要加【MB】字样,否则无法ac。

    2:采用算术编码给输入的字符序列进行编码,输出数值区间

    字符序列中含有a,b,c,d5个字符,输入为各字符的出现概率,及需要编码的字符序列,输出为算术编码区间(保留小数点后10位)。

    例如:

    输入:

    0.2  0.3 0.1 0.15 0.25(空格分隔)

    aaabded (待编码字符序列)

    输出:

    0.0033640000 

    0.0033775000

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. int main(){
    6. double a,b,c,d,e;
    7. cin>>a>>b>>c>>d>>e;
    8. char wait[100];
    9. scanf("%s",wait);
    10. double aa,bb,cc,dd,left=0,right=1;
    11. int len=strlen(wait);
    12. aa=a;
    13. bb=a+b;
    14. cc=a+b+c;
    15. dd=a+b+c+d;
    16. for(int i=0;i
    17. char t=wait[i];
    18. double gap=right-left;
    19. double myleft=left;
    20. if(t=='a'){
    21. right=gap*aa+myleft;
    22. }
    23. else if(t=='b'){
    24. left=gap*aa+myleft;
    25. right=gap*bb+myleft;
    26. }
    27. else if(t=='c'){
    28. left=gap*bb+myleft;
    29. right=gap*cc+myleft;
    30. }
    31. else if(t=='d'){
    32. left=gap*cc+myleft;
    33. right=gap*dd+myleft;
    34. }
    35. else{
    36. left=gap*dd+myleft;
    37. }
    38. }
    39. printf("%.10f\n%.10f",left,right);
    40. return 0;
    41. }

    3:对采用算术编码的符号序列进行译码,输出原始的符号序列

    对于由a,b,c,d,e 5个符号组成的符号序列,输入各符号的出现概率及其算术编码,输出译码后的符号,符号长度是10位。

    例如:

    输入:

    0.2 0.3 0.1 0.15 0.25 (空格分隔)

    0.0033713425

    输出:

    aaabdedcbe

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. /*
    6. 0.2 0.3 0.1 0.15 0.25
    7. 0.0033713425
    8. */
    9. int main(){
    10. double a,b,c,d,e,result;
    11. cin>>a>>b>>c>>d>>e;
    12. cin>>result;
    13. double aa,bb,cc,dd,left=0,right=1;
    14. aa=a;
    15. bb=a+b;
    16. cc=a+b+c;
    17. dd=a+b+c+d;
    18. char ret[100];
    19. int cnt=0;
    20. while(1){
    21. double gap=right-left;
    22. double node1=left+gap*aa;
    23. double node2=left+gap*bb;
    24. double node3=left+gap*cc;
    25. double node4=left+gap*dd;
    26. if(cnt==10){//left==right
    27. break;
    28. }
    29. if(result>=left && result
    30. ret[cnt++]='a';
    31. right=node1;
    32. }
    33. else if(result>=node1 && result
    34. ret[cnt++]='b';
    35. left=node1;
    36. right=node2;
    37. }
    38. else if(result>=node2 && result
    39. ret[cnt++]='c';
    40. left=node2;
    41. right=node3;
    42. }
    43. else if(result>=node3 && result
    44. ret[cnt++]='d';
    45. left=node3;
    46. right=node4;
    47. }
    48. else{
    49. ret[cnt++]='e';
    50. left=node4;
    51. }
    52. }
    53. for(int i=0;i
    54. cout<
    55. }
    56. return 0;
    57. }

  • 相关阅读:
    算法竞赛入门【码蹄集进阶塔335题】(MT2321-2325)
    如何使用 Python 开发企业文档管理应用程序 (教程含源码)
    【机器学习】什么是随机马尔科夫决策过程?
    (十三)数据结构-树与二叉树的应用
    【英雄哥六月集训】第 24天: 线段树
    stm32管脚重映射
    小满Vue3第四十五章(Vue3 Web Components)
    Spring5学习笔记之整合MyBatis
    MEMS制造的基本工艺——晶圆键合工艺
    【JavaSE】Java数组
  • 原文地址:https://blog.csdn.net/m0_65787507/article/details/133430177