小编Ser*_*les的帖子

设置音频单元格式并渲染交错PCM音频的回调

我正在尝试播放我在一系列UDP数据包中收到的音频.它们被解码为具有以下属性的PCM帧:

  • 2个频道
  • 交错
  • 单个通道中每个样本2个字节(每帧4个字节)
  • 采样率为48000.

每个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回调可以从该缓冲区中获取帧,并播放它们.它是否正确? …

audio audiounit ios

4
推荐指数
1
解决办法
5335
查看次数

glPolygonMode问题 - GL_FILL"跳过"顶点

尝试绘制多边形并用特定颜色填充时,我遇到了一个奇怪的问题:

如果我将多边形模式设置为:

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

多边形渲染得很好:

将多边形填充模式设置为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)

c++ opengl glut 2d

3
推荐指数
1
解决办法
870
查看次数

PHP:处理从Perl发送的POST请求

我是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!或其他错误信息.我想我正在请求一个文件并且这就是它正在打印的内容是有意义的,但是我很困惑我的错误是什么.我一直在寻找一些例子,但到目前为止我没有找到任何可以指向正确方向的东西.

php perl

2
推荐指数
1
解决办法
1098
查看次数

Vala 中的正则表达式捕获组

有这样的事情吗?我一直在查看 Vala API 并且 Regex 对象似乎不支持捕获组,以便我以后可以引用它们。目前有没有办法绕过这个明显的限制?假设我正在从一组字符串(文件的内容)中解析一个字符串,以获得给定的模式,例如:

参数 = 值

但我希望语法宽松,这样它也可以说

 参数=值
或者
参数 = 值
等等...我想到的第一个想法是使用带有捕获组的正则表达式,但据我所知,目前似乎不支持将此功能作为 Vala 的一部分。

我能想出的唯一替代方法是使用匹配空格的正则表达式拆分字符串,以便我最终得到一个可以分析的数组,但该文件可能不仅包含类似“参数 = 值”的格式行。

regex vala capturing-group

1
推荐指数
1
解决办法
1101
查看次数

标签 统计

2d ×1

audio ×1

audiounit ×1

c++ ×1

capturing-group ×1

glut ×1

ios ×1

opengl ×1

perl ×1

php ×1

regex ×1

vala ×1