小编ebo*_*yen的帖子

Android 2.3 Visualizer - 理解getFft()的麻烦

第一次在这里如此抱歉任何屠宰格式.

所以我对DSP是全新的,所以我对傅里叶变换只有非常全面的了解.我正在尝试为Android SDK 9构建一个可视化应用程序,其中包括android.media.audiofx.Visualizer中的Visualizer类 http://developer.android.com/reference/android/media/audiofx/Visualizer.html

方法getFft()的javadoc,这是我使用的状态:

"返回当前正在播放的音频内容的频率捕获.捕获是一个8位幅度的FFT.请注意,FFT的大小是指定捕获大小的一半,但是频谱的两侧都返回,产生的字节数相等捕获大小."

首先,"光谱的双方"是什么意思?该输出与标准FFT有何不同?

这是字节数组的一些示例输出,getFft()给出了124点以保持简单,我抓住了前31个分档.以下是前31个箱子的大小:

{123, -2, -23, -3, 6, -16, 15, -10, -8, -12, 9, -9, 17, -6, -18, -22, -8, 4, -5, -2, 10, -3, -11, 3, -4, -11, -8, 15, 16, 11, -12, 12}
Run Code Online (Sandbox Code Playgroud)

任何帮助或解释将不胜感激!

编辑: 因此,在盯着一堆图表后,看起来我的问题的一部分是谷歌没有指定使用的是哪个单位.几乎所有其他测量都是以mHz进行的,假设FTT输出也是mHz是否公平?有没有一个地方可以看到Visualizer类的源代码,所以也许我可以弄清楚幕后真的到底是怎么回事?

我继续抓住了getFft()的所有输出

93, -2, -28, -16, -21, 19, 44, -16, 3, 16, -9, -4, 0, -2, 21, 16, -3, 1, 2, 4, -3, 5, 5, 10, 6, 4, -9, 7, -2, -1, 2, 11, -1, 5, -8, …
Run Code Online (Sandbox Code Playgroud)

android signal-processing fft visualizer android-sdk-2.3

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

防止TextIOWrapper以Py2/Py3兼容的方式关闭GC

我需要完成的事情:

给定二进制文件,以提供TextIOBaseAPI 的几种不同方式对其进行解码.理想情况下,这些后续文件可以在不需要明确跟踪其生命周期的情况下传递.

不幸的是,包含一个BufferedReader将导致该读取器在TextIOWrapper超出范围时被关闭.

这是一个简单的演示:

In [1]: import io

In [2]: def mangle(x):
   ...:     io.TextIOWrapper(x) # Will get GCed causing __del__ to call close
   ...:     

In [3]: f = io.open('example', mode='rb')

In [4]: f.closed
Out[4]: False

In [5]: mangle(f)

In [6]: f.closed
Out[6]: True
Run Code Online (Sandbox Code Playgroud)

我可以通过覆盖在Python 3中解决这个问题__del__(这对我的用例来说是一个合理的解决方案,因为我可以完全控制解码过程,我只需要在最后公开一个非常统一的API):

In [1]: import io

In [2]: class MyTextIOWrapper(io.TextIOWrapper):
   ...:     def __del__(self):
   ...:         print("I've been GC'ed")
   ...:         

In [3]: def mangle2(x):
   ...:     MyTextIOWrapper(x)
   ...:     

In [4]: f2 …
Run Code Online (Sandbox Code Playgroud)

python garbage-collection python-2.7 python-3.x

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

Android片段和单独的线程

我正在使用android ViewPager:http://developer.android.com/reference/android/support/v4/view/ViewPager.html

这个类允许你基本上将一堆视图或片段打成一个组,并轻松地通过它们页面.当我尝试创建一个单独的线程随机随机播放视图时,我的问题就出现了.

我扩展了一个在我的ViewPager上调用setCurrentItem的线程,我通过参数传入了它.当我这样做时,我收到了这个:

java.lang.IllegalStateException: Must be called from main thread of process
Run Code Online (Sandbox Code Playgroud)

我想我需要做的就是从我的activityfragment调用一个方法,所以我创建了changePageFromActivity来执行脏工作并通过将我的活动传递给我的线程来调用它.但这也不起作用.下面是完整的堆栈跟踪:

 FATAL EXCEPTION: Thread-11
 java.lang.IllegalStateException: Must be called from main thread of process
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1392)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:160)
at android.support.v4.view.ViewPager.populate(ViewPager.java:804)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:433)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:405)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:397)
at com.lyansoft.music_visualizer.MusicVisualizerActivity.changePageFromActivity(MusicVisualizerActivity.java:144)
at com.lyansoft.music_visualizer.ShuffleThread.run(ShuffleThread.java:38)
Run Code Online (Sandbox Code Playgroud)

在做了一些研究后,我收集到碎片很容易被破坏并导致一个不同的线程,以防止任何问题ViewPager只是确保我想要的方法必须从主活动中调用.

所以我的问题是:

是否有可能注入一些东西

run() { while(condition) { methodIWantHere(); sleep(timeout); } }
Run Code Online (Sandbox Code Playgroud)

在我的主要活动的线程中没有破坏它?

要么

什么是更好的设计模式来实现我想要的效果?(以一致的指定间隔更改视图)

multithreading android android-fragments

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

导航回活动时ViewPager + SurfaceView =长延迟

基本上标题是什么,

我的应用程序主要包括一个ViewPager使用aFragmentStatePagerAdapter

当我SurfaceViews向FragmentStatePagerAdapter 添加一系列时,会出现问题.仅出于测试目的,我没有以任何方式继承SurfaceViews.当我浏览几页时,点击"home",然后返回活动,整个设备在渲染任何内容之前冻结一两秒钟.我可以在从背包中取出后恢复所需的时间几次启动并完成()应用程序.我知道应用程序正在运行,因为在第一次screendraw最终发生时,几个AsyncTasks几乎已经完成了.我知道这些AsyncTasks不会导致问题,因为我已将它们删除无效.

当我将SurfaceViews更改为Views问题时,问题就完全消失了.

当我使用我的实际SurfaceViews(我的项目不可协商)时,会出现此问题.多个设备上也会出现此问题.

在这一点上,我认为错误完全在于ViewPager,但我不知道该怎么办,因为我需要那个接口组件.

任何帮助将不胜感激!

编辑:

为了澄清,SurfaceViews/Views表示添加到FragmentStatePagerAdapter的片段视图.

android android-view android-viewpager

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

使用DC.js(crossfilter和d3便利库)时遇到问题 - 条形图没有显示值

我正在使用这个库:Dimensional Charting来构建一些需要CrossFilter功能的相对标准的图表.

我一直在关注这些例子,但他们并不适合我.

这是我的代码:

var dashData = crossfilter(data.report),
dataByHour = dashData.dimension(function(d){ return d3.time.hour(new Date(d.timestamp))}),
totalByHour = dataByHour.group().reduceSum(function(d) { return d.amount }),

dc.barChart("#graphTimeOverview")
    .width(990) // (optional) define chart width, :default = 200
    .height(250) // (optional) define chart height, :default = 200
    .transitionDuration(500) // (optional) define chart transition duration, :default = 500
    .margins({top: 10, right: 50, bottom: 30, left: 40})
    .dimension(dataByHour) // set dimension
    .group(totalByHour) // set group
    .elasticY(true)
    .centerBar(true)
    .gap(1)
    .x(d3.time.scale().domain([new Date(data.report[0].timestamp), new Date(data.report[(data.report.length - 1)].timestamp)]))
    .round(d3.time.hour.round)
    .xUnits(d3.time.hours)
    .renderHorizontalGridLines(true); …
Run Code Online (Sandbox Code Playgroud)

javascript d3.js crossfilter dc.js

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

有没有一种方法可以浅复制现有文件对象?

这样的用例是基于某个文件对象创建多个生成器,而其中任何一个都不践踏彼此的读取状态。

最初,我(认为我)使用了一个可行的实现seek()tell()并且每个生成器都由一个元生成器装饰,该生成器保持文件句柄的位置。这在诸如此类的事情上可以正常工作StringIO,但在实际文件上却失败了,因为预读缓冲区利用了offset

使用readline()或模拟真实文件对象是不可行的,因为这样做的原因是文件过大会首先提示生成器表达式。因此,丢失预读缓冲区并不是一个很好的选择(顺便说一句,为什么Python首先要以这种方式实现?缓冲区不应该像缓存一样,实际上并没有暴露给用户吗?应该进行适当的封装)tell()首先避免了此问题...)

然后copy.copy,我尝试使用,但结果如下:<closed file '<uninitialized file>', mode '<uninitialized file>' at 0x7f722ffda810>。似乎无法使用。

是否存在替代的复制方式?有没有办法初始化文件对象?还是应该完全放弃此用例,因为在Python中是不可能的?

python

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