标签: echo

Java中的声学回声消除

我正在实现一个使用纯Java的VOIP应用程序.当用户不使用耳机时(主要是带有内置麦克风的笔记本电脑),会出现回声问题.

目前发生了什么

VOIP应用程序的细节只是Java媒体框架的简单数据.基本上,我想在将音频数据写入扬声器输出之前对音频数据执行一些数字信号处理.

  public synchronized void addAudioData(byte[] ayAudioData)
  {
    m_oBuffer.enqueue(ayAudioData);
    this.notify();
  }
Run Code Online (Sandbox Code Playgroud)

如您所见,音频数据到达并在缓冲区中排队.这是为了迎合狡猾的连接并允许不同的数据包大小.这也意味着在我将音频数据播放到扬声器线路之前,我可以访问任何花哨的DSP操作所需的音频数据.

我已经管理了一个可以工作的回声消除器,但它需要大量的交互式用户输入,我想要一个自动回声消除器.

手动回声消除器

public static byte[] removeEcho(int iDelaySamples, float fDecay, byte[] aySamples)
  {
    m_awDelayBuffer = new short[iDelaySamples];
    m_aySamples = new byte[aySamples.length];
    m_fDecay = (float) fDecay;
    System.out.println("Removing echo");
    m_iDelayIndex = 0;

    System.out.println("Sample length:\t" + aySamples.length);
    for (int i = 0; i < aySamples.length; i += 2)
    {
      // update the sample
      short wOldSample = getSample(aySamples, i);

      // remove the echo
      short wNewSample = (short) (wOldSample - fDecay * m_awDelayBuffer[m_iDelayIndex]); …
Run Code Online (Sandbox Code Playgroud)

java signal-processing javasound echo cancellation

8
推荐指数
2
解决办法
9269
查看次数

用于更改文件名的脚本

我是awk和shell编程的新手.我有一堆文件名file_0001.dat,file_0002.dat......file_1000.dat.我想更改文件名,例如file_之后的数字与之前的文件名相比将是4的倍数.所以我想改变

file_0001.dat to file_0004.dat
file_0002.dat to file_0008.dat 
Run Code Online (Sandbox Code Playgroud)

等等.

任何人都可以建议一个简单的脚本来做它.我尝试了以下但没有任何成功.

#!/bin/bash
a=$(echo $1 sed -e 's:file_::g' -e 's:.dat::g')
b=$(echo "${a}*4" | bc)
shuf file_${a}.dat > file_${b}.dat
Run Code Online (Sandbox Code Playgroud)

awk sed echo

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

使用Speex和DirectSound进行声学回声消除(AEC)

我正在尝试使用Speex编解码器库执行声学回声消除(AEC).根据Speex文档,我需要执行两个调用:

 speex_echo_playback(echo_state, echo_frame); 
Run Code Online (Sandbox Code Playgroud)

每次播放音频帧,和

 speex_echo_capture(echo_state, input_frame, output_frame);
Run Code Online (Sandbox Code Playgroud)

对于每个捕获的帧.

由于我使用的是DirectSound,我认为我可以在调用speex_echo_playback时使用主DirectSound缓冲区作为echo_frame,例如,

  DWORD offset = 0;
  DWORD length = 0;
  LPVOID block1, block2;
  DWORD length1, length2;
  DWORD flags = DSBLOCK_ENTIREBUFFER;

  HRESULT hr = primary_buffer->Lock(
        offset
      , length
      , &block1
      , &length1
      , &block2
      , &length2
      , flags
      );

  // Would like to convert the buffer into a form that
  // speex_echo_capture() can use.
  // Why does length1 == length2 == 0 always? 

  hr = primary_buffer->Unlock( block1, length1, block2, length2 );
Run Code Online (Sandbox Code Playgroud)

文档确实说这些是只写指针,但是无论如何都不能自己使用缓冲区数据?

这基本上就是我创建缓冲区的方式:

  CComPtr< …
Run Code Online (Sandbox Code Playgroud)

c++ audio directsound echo speex

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

如何在PHP的echo函数中使用引号?

如何在PHP的echo函数中使用引号?

echo "<script type="text/javascript">";
Run Code Online (Sandbox Code Playgroud)

不好用.

谢谢!

php echo

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

不要将html存储为字符串(执行或处理html字符串)

在PHP(Wordpress主题函数,尝试将存储在主题选项中的html添加到博客标题)中,我试图获得以下行:

$x="<p>html</p>"; echo $x;
Run Code Online (Sandbox Code Playgroud)

要呈现html,就像:

echo "<p>html</p>";
Run Code Online (Sandbox Code Playgroud)

结果不同,第一个将显示html标签,而第二个将处理html.有人可以请帮助.谢谢

html php escaping echo

7
推荐指数
2
解决办法
2万
查看次数

expr 命令执行期间出现错误消息:expr:非整数参数

我尝试将两个数字(实际上这些是某些远程执行命令的输出)分配给两个不同的变量,比如说 A 和 B。

当我回显 A 和 B 时,它们显示值:

echo $A
809189640755
echo $B
1662145726

sum=`expr $A + expr $B`
expr: non-integer argument
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用 typeset -i 但没有成功。据我所知,bash 并不将我的变量视为整数。将变量转换为整数以便我可以对它们进行加、减、乘等操作的最简单方法是什么?

谢谢。

bash shell integer echo

7
推荐指数
2
解决办法
5万
查看次数

为什么@ECHO ON/OFF不在批处理文件IF块中工作?

@echo on并且在批处理文件中@echo off的括号内if块中执行时似乎没有任何影响.这是一个简单的演示:

@echo off
echo Test #1
if 1 == 1 (
  @echo on
  echo Test #2
  @echo off
  echo Test #3
)
@echo on
echo Test #4
Run Code Online (Sandbox Code Playgroud)

在命令行上运行上面的输出是:

测试#1
测试#2
测试#3
C:\ mybatchfilelocation> echo测试#4
测试#4

任何人都可以解释这个和/或建议一个解决方法吗?(期望它可能通过大量使用goto和标签来修复,但如果可能的话,我更愿意继续使用括号格式...)

windows cmd batch-file echo

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

可以bash echo命令返回非零退出代码吗?

就像标题所说,有什么情况下echo会在bash/sh中退出非零值?

代码ex.

until monitor_thing_happens; do
  test $retry_counter -eq 0 && echo "thing didn't happen" && exit 1
  let "retry_counter--"
  echo "tries remaining: ${retry_counter}"
  sleep 5
done
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,如果echo退出非零,则&&逻辑中断,我们永远不会退出1,我们将永远循环.任何危险/边缘情况,回声可以退出非零?

unix bash sh echo

7
推荐指数
2
解决办法
3420
查看次数

Laravel Blade 中的 {{dump('string')}} 输出值两次

使用 Laravel 5.5.34,我在使用 dump() 帮助程序在 Blade 模板中输出调试信息时遇到问题。

{{ dump('test') }}
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

截屏

我不希望原始字符串“test”出现在实际调试输出下方。这是正常行为吗?如果是,我该如何禁用它?如果不是,什么错误配置可能导致它?

php dump echo laravel-5 laravel-blade

7
推荐指数
2
解决办法
2万
查看次数

perl6 IO :: Socket ::异步服务器死机,异常:peer通过peer重置连接

这是echo服务器代码:

#!/usr/bin/env perl6
my $port = 3333 ;
say "listen port $port" ;

react {
    my $ids = 0 ;
    whenever IO::Socket::Async.listen('0.0.0.0', $port ) -> $conn {
        my $id = $ids++ ;
        $conn.print( "$id: hello\n") ;
        whenever $conn.Supply.lines -> $line {
            say "$id: $line" ;
            $conn.print( "$id : $line\n") ;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是客户端代码:

#!/usr/bin/env perl6
my $port = 3333 ;
my $conn = await IO::Socket::Async.connect('localhost', $port );
$conn.print: "{time}\n";

#$conn.Supply.tap(-> $v { print $v });

sleep 1 ;
$conn.close; …
Run Code Online (Sandbox Code Playgroud)

sockets asynchronous echo perl6 async-await

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