第一次在这里如此抱歉任何屠宰格式.
所以我对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) 我需要完成的事情:
给定二进制文件,以提供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) 我正在使用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)
在我的主要活动的线程中没有破坏它?
要么
什么是更好的设计模式来实现我想要的效果?(以一致的指定间隔更改视图)
基本上标题是什么,
我的应用程序主要包括一个ViewPager使用aFragmentStatePagerAdapter
当我SurfaceViews向FragmentStatePagerAdapter 添加一系列时,会出现问题.仅出于测试目的,我没有以任何方式继承SurfaceViews.当我浏览几页时,点击"home",然后返回活动,整个设备在渲染任何内容之前冻结一两秒钟.我可以在从背包中取出后恢复所需的时间几次启动并完成()应用程序.我知道应用程序正在运行,因为在第一次screendraw最终发生时,几个AsyncTasks几乎已经完成了.我知道这些AsyncTasks不会导致问题,因为我已将它们删除无效.
当我将SurfaceViews更改为Views问题时,问题就完全消失了.
当我使用我的实际SurfaceViews(我的项目不可协商)时,会出现此问题.多个设备上也会出现此问题.
在这一点上,我认为错误完全在于ViewPager,但我不知道该怎么办,因为我需要那个接口组件.
任何帮助将不胜感激!
编辑:
为了澄清,SurfaceViews/Views表示添加到FragmentStatePagerAdapter的片段视图.
我正在使用这个库: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) 这样的用例是基于某个文件对象创建多个生成器,而其中任何一个都不践踏彼此的读取状态。
最初,我(认为我)使用了一个可行的实现seek(),tell()并且每个生成器都由一个元生成器装饰,该生成器保持文件句柄的位置。这在诸如此类的事情上可以正常工作StringIO,但在实际文件上却失败了,因为预读缓冲区利用了offset。
使用readline()或模拟真实文件对象是不可行的,因为这样做的原因是文件过大会首先提示生成器表达式。因此,丢失预读缓冲区并不是一个很好的选择(顺便说一句,为什么Python首先要以这种方式实现?缓冲区不应该像缓存一样,实际上并没有暴露给用户吗?应该进行适当的封装)tell()首先避免了此问题...)
然后copy.copy,我尝试使用,但结果如下:<closed file '<uninitialized file>', mode '<uninitialized file>' at 0x7f722ffda810>。似乎无法使用。
是否存在替代的复制方式?有没有办法初始化文件对象?还是应该完全放弃此用例,因为在Python中是不可能的?
android ×3
python ×2
android-view ×1
crossfilter ×1
d3.js ×1
dc.js ×1
fft ×1
javascript ×1
python-2.7 ×1
python-3.x ×1
visualizer ×1