我正在尝试播放我在一系列UDP数据包中收到的音频.它们被解码为具有以下属性的PCM帧:
每个UDP数据包包含480个帧,因此缓冲区的大小为480*2(通道)*2(每个通道的字节数).
我需要设置一个音频单元来播放这些数据包.所以,我的第一个问题是,我应该如何为音频单元设置AudioStreamBasicDescription结构?查看文档我甚至不确定交错PCM是否是可接受的格式.
这是我到目前为止所得到的:
struct AudioStreamBasicDescription {
Float64 mSampleRate; //48000
UInt32 mFormatID; //?????
UInt32 mFormatFlags; //?????
UInt32 mBytesPerPacket; //Not sure what "packet" means here
UInt32 mFramesPerPacket; //Same as above
UInt32 mBytesPerFrame; //Same
UInt32 mChannelsPerFrame; //2?
UInt32 mBitsPerChannel; //16?
UInt32 mReserved; //???
};
typedef struct AudioStreamBasicDescription AudioStreamBasicDescription;
Run Code Online (Sandbox Code Playgroud)
其次,在设置之后,我不确定如何将帧从UDP回调到实际的音频单元渲染功能.
我目前有一个来自套接字监听器的回调函数,我在其中生成包含我想要播放的音频的int16*缓冲区.据我了解,我还必须为以下形式的音频单元实现渲染回调:
OSStatus RenderFrames(
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
//No idea what I should do here.
return noErr;
}
Run Code Online (Sandbox Code Playgroud)
总而言之,我认为我的套接字接收回调应该做的是解码帧,并将它们放在缓冲结构中,以便RenderFrames回调可以从该缓冲区中获取帧,并播放它们.它是否正确? …
尝试绘制多边形并用特定颜色填充时,我遇到了一个奇怪的问题:
如果我将多边形模式设置为:
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
多边形渲染得很好:

但是,只要我用以下内容替换该行:
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
多边形没有向右填充,但似乎大多数线都朝向其第一个顶点投射,或者沿着这些线投射:

我显然做错了什么.我想要做的是保持多边形内的颜色,但它似乎忽略了几个顶点.可能有什么问题?
这是我的代码中可能感兴趣的部分选定部分.我正在跳过一些数据结构加载和其他可能不太相关的东西:
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(640, 480);
glutInitWindowPosition(150, 100);
glutCreateWindow("CR-View GL");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
void display(void) {
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
/* Set drawing color */
glColor3f(1, 0, 1);
drawPolys(currentDrawingMode);
/* Clear screen and draw */
glutSwapBuffers();
}
// Draws the polygons
void drawPolys (int id) {
int poly, vertex;
// set wireframe mode (if an empty polygon is required) …Run Code Online (Sandbox Code Playgroud) 我是PHP的新手,我似乎做错了什么.一方面,我有一个看起来像这样的Perl脚本:
use LWP::UserAgent;
my $browser = LWP::UserAgent->new;
my $url = 'https://url/index.php';
my $response = $browser->post($url, [
"command" => "test",
"data" => "123"
]);
die "Error getting $url" unless $response->is_success;
print $response->content;
Run Code Online (Sandbox Code Playgroud)
在服务器上,index.php文件如下所示:
<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
echo "Hello!\n";
}else {
echo "Error\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
而且......就是这样.但是,如果我尝试执行Perl脚本,它会打印整个index.php文件,而不是Hello!或其他错误信息.我想我正在请求一个文件并且这就是它正在打印的内容是有意义的,但是我很困惑我的错误是什么.我一直在寻找一些例子,但到目前为止我没有找到任何可以指向正确方向的东西.
有这样的事情吗?我一直在查看 Vala API 并且 Regex 对象似乎不支持捕获组,以便我以后可以引用它们。目前有没有办法绕过这个明显的限制?假设我正在从一组字符串(文件的内容)中解析一个字符串,以获得给定的模式,例如:
参数 = 值
但我希望语法宽松,这样它也可以说
参数=值或者
参数 = 值等等...我想到的第一个想法是使用带有捕获组的正则表达式,但据我所知,目前似乎不支持将此功能作为 Vala 的一部分。
我能想出的唯一替代方法是使用匹配空格的正则表达式拆分字符串,以便我最终得到一个可以分析的数组,但该文件可能不仅包含类似“参数 = 值”的格式行。