我已经简化了我的问题并提供了一个赏金:有 什么选项可以将原始PCM音频数据压缩到Android设备上的mp3.
我的原帖: 我正在Android手机上创建一个合成器,我一直在生成PCM数据发送到扬声器.现在我想知道我是否可以将这个PCM数据编码为mp3以保存到SD卡.所述MediaRecorder对象可以编码音频从麦克风成各种格式的到来,但不允许从程序生成的音频数据的编码.
所以我的问题是,是否有用于编码音频的标准Android API?如果没有,那么基于Java或NDK的纯解决方案是什么?你能推荐其中任何一个吗?
如果不这样做,我只需要将生成的音频保存为WAV文件,我可以轻松完成.
我刚刚将我的Nexus 5更新为android 6,直到现在我的应用程序工作正常,但现在广播接收器无法正常工作.新版本有什么变化吗?这是我尝试过的代码,用于以前的版本,但不是在marshmallow中 -
Android Manifest
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" ></uses-permission>
Run Code Online (Sandbox Code Playgroud)
广播接收器
public String TAG ="someClass";
private static String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equalsIgnoreCase(ACTION_SMS_RECEIVED)) {
Log.d(TAG, "Received...");
}
}
Run Code Online (Sandbox Code Playgroud)
服务
Broadcast_receiver broadcast_receiver = new Broadcast_receiver();
IntentFilter filter1 = new IntentFilter();
filter1.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(broadcast_receiver, filter1);
Run Code Online (Sandbox Code Playgroud)
同样,PHONE_STATE的广播接收器也不起作用.
我必须在字符串中搜索子字符串并在每次找到子字符串时显示下面给出的完整单词 -
例如:
Input: excellent
Output: excellent,excellently
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何使输出像上面那样.
我的输出:
excellent,excellently,
Run Code Online (Sandbox Code Playgroud)
它总是给我一个逗号.
Prog:desc迭代地将字典中的每个单词转换为小写,并将转换后的单词存储在较低的单词中.使用strncmp比较input_str和lower的前两个len字符.如果strncmp的返回值为0,则两个字符串的前两个len字符相同.
void complete(char *input_str)
{
int len = strlen(input_str);
int i, j, found;
char lower[30];
found = 0;
for(i=0;i<n_words;i++)
{
for(j=0;j<strlen(dictionary[i]);j++)
{
lower[j] = tolower(dictionary[i][j]);
}
lower[j+1]='\0';
found=strncmp(input_str,lower,len);
if(found==0)//found the string n print out
{
printf("%s",dictionary[i]);
printf(",");
}
}
if (!found) {
printf("None.\n");
} else {
printf("\n");
}
}
Run Code Online (Sandbox Code Playgroud) 生成的子进程fork()是否可以使进程id小于其父进程(不超过最大限制)?
PID通常是下一个可用值,但无论如何它可能小于父级的PID?
我写了这个程序来检查局部变量和全局变量的地址.我读到堆栈段存储局部变量,数据段存储全局变量.但是当我执行这个程序时,两个变量的地址没有太大差别,这意味着它们必须在同一个段中.不明白为什么会发生这种情况..这里是代码和输出 -
#include<stdio.h>
int *chr;
void main(){
int *char1;
printf("global- %p \n local- %p",chr,char1);
chr=malloc(sizeof(int));
char1=malloc(sizeof(int));
printf("malloc_global = %p \n malloc_local = %p",chr,char1);
}
Run Code Online (Sandbox Code Playgroud)
输出是 -
global- (nil)
local- (nil)
malloc_global = 0x969010
malloc_local = 0x969030
Run Code Online (Sandbox Code Playgroud) 是否有任何理由在stdout而不是stderr上打印错误?
我看到一些人使用stdout,分别是printf()来打印错误信息.有没有理由这样做或者只是懒得使用stderr?
我尝试了以下代码并得到了一个分段错误 -
int size=30;
char *str;
fputs(fgets(str,size,STDIN),STDOUT);
Run Code Online (Sandbox Code Playgroud)
但当我这样做 -
buff=fgets(str,size,STDIN);
fputs(buff,STDOUT);
Run Code Online (Sandbox Code Playgroud)
它工作得很好.此外,如果我使用malloc for str,第一个代码就会运行.我无法理解这是怎么回事.