在Kotlin中没有内置的方法来转换boolean - int吗?我说的是平时:
true -> 1
false -> 0
Run Code Online (Sandbox Code Playgroud)
如果没有,那么这是一种惯用的方法吗?
我目前正在实现一个Web应用程序,我希望用户录制一些音频然后我想要一个提交按钮来POST记录到服务器的mp3文件.
我的服务器(Flask)的主要路由'/'
是等待POST请求:
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == "GET":
return render_template('index.html', request="GET")
else:
print request.files
print request.form
print request.form['file']
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
handle_file(file)
return render_template('index.html', request="POST")
Run Code Online (Sandbox Code Playgroud)
这是我的JS代码:
这里有两个主要问题:
1)录制后下载mp3文件时,媒体播放器无法打开.在录制音频时,我似乎做错了.
2)当我print request.form
在收到POST请求后进入我的服务器时,我只得到这个:
ImmutableMultiDict([('file', u'')])
Run Code Online (Sandbox Code Playgroud)
并print request.form['file']
返回一个空行.
为什么会这样?POST请求有问题吗?
最后,我希望能够解码我发布的字符串以转换回mp3.我怎么做?
注意:这些都不能保持不变.任务是录制音频,然后将其POST到服务器.如果有更有效的方法,欢迎任何提示.另外,我不在乎文件是wav还是mp3.
我正在使用此算法来检测此音频文件的音高 .正如您所听到的,它是在吉他上播放的E2音符,背景中有一点噪音.
我正在使用上面链接的算法,如下所示:
y, sr = librosa.load(filename, sr=40000)
pitches, magnitudes = librosa.core.piptrack(y=y, sr=sr, fmin=75, fmax=1600)
np.set_printoptions(threshold=np.nan)
print pitches[np.nonzero(pitches)]
Run Code Online (Sandbox Code Playgroud)
结果,我fmin
和我之间几乎可以获得所有可能的频率fmax
.我该如何处理piptrack
方法的输出以发现时间范围的基本频率?
UPDATE
不过,我仍然不确定这些2D数组代表什么.假设我想知道第5帧中82Hz的强度.我可以使用STFT函数来做到这一点,它只返回一个2D矩阵(用于绘制频谱图).
但是,piptrack
做一些额外的事情可能是有用的,我真的不明白什么.pitches[f, t] contains instantaneous frequency at bin f, time t
.这是否意味着,如果我想在时间帧t找到最大频率,我必须:
magnitudes[][t]
数组,找到具有最大幅度的bin.f
.pitches[b][t]
找到属于该bin的频率?我正在看看这里找到的Arrow库.为什么要使用一种Option
类型而不是Kotlin的内置nullables?
我使用Librosa库进行音高和起始检测.具体来说,我正在使用onset_detect
和piptrack
.
这是我的代码:
def detect_pitch(y, sr, onset_offset=5, fmin=75, fmax=1400):
y = highpass_filter(y, sr)
onset_frames = librosa.onset.onset_detect(y=y, sr=sr)
pitches, magnitudes = librosa.piptrack(y=y, sr=sr, fmin=fmin, fmax=fmax)
notes = []
for i in range(0, len(onset_frames)):
onset = onset_frames[i] + onset_offset
index = magnitudes[:, onset].argmax()
pitch = pitches[index, onset]
if (pitch != 0):
notes.append(librosa.hz_to_note(pitch))
return notes
def highpass_filter(y, sr):
filter_stop_freq = 70 # Hz
filter_pass_freq = 100 # Hz
filter_order = 1001
# High-pass filter
nyquist_rate = sr / …
Run Code Online (Sandbox Code Playgroud) python signal-processing pitch-tracking librosa onset-detection
我的问题与此类似。但是,我使用带有服务帐户的API Java 客户端库,从我的服务器调用 API。
我的代码遵循本指南,非常简单。但是,对于我的请求,我似乎无法得到适当的错误。这就是我构建我的方式AndroidPublisher
:
val credential = GoogleCredential.fromStream(FileInputStream(
"/path/to/json"
)).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER))
androidPublisher = AndroidPublisher.Builder(httpTransport, JSON_FACTORY, credential)
.setApplicationName(packageName)
.build()
Run Code Online (Sandbox Code Playgroud)
JSON 是从开发人员控制台生成的,位于服务帐户下。这是我提出请求的方式:
androidPublisher.purchases().subscriptions().get(packageName, "valid-sku", "invalid-token").execute()
Run Code Online (Sandbox Code Playgroud)
我的订阅 ID 有效,但我的令牌无效。我希望响应中出现诸如“无效令牌”之类的错误。但是,我得到的是:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Invalid Value",
"reason" : "invalid"
} ],
"message" : "Invalid Value"
}
Run Code Online (Sandbox Code Playgroud)
这是由于令牌无效而导致的一般错误还是身份验证问题?如果是身份验证问题,我该如何解决?如果是无效的令牌问题,我怎么知道?
更多信息:
java google-api-java-client kotlin google-oauth google-play-developer-api
我有一个非常简单的问题:
假设我有一个代表一个人在酒吧里的抽象类.
public class Person {
protected String firstName;
protected String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有2个课程可以扩展Person,让我们说一个调酒师课程和一个客户课程.
在客户的课堂上,我也想要一个代表他的年龄的int作为一个领域.在调酒师课上,我们没有.
另外,对于客户类,我想要一个方法isAdult().
public class Bartender extends Person {
public Bartender(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
public class Customer extends Person {
private int age;
public Customer(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
}
Run Code Online (Sandbox Code Playgroud)
我现在有两个问题:
1)这不起作用,因为我收到消息"隐式超级构造函数Passenger()未定义.必须显式调用另一个构造函数".这到底是什么意思?2)对于方法isAdult(),我觉得最好的方法是在抽象类Person中实现它,如下所示:
public …
Run Code Online (Sandbox Code Playgroud) 用户可以复制并粘贴到textarea html输入中,有时会粘贴无效的UTF-8字符,例如,从包含选项卡的rtf文件中进行复制和粘贴。
如何检查字符串是否为有效的UTF-8?
我正在为从S3触发,获取一些文件数据并将其放入另一个S3存储桶的AWS Lambda实现Java 8程序包。
这是我目前的情况Handler
:
public class Handler implements RequestHandler<S3Event, Void> {
private static final String TARGET_BUCKET = "some-bucket";
private AmazonS3Client s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
private Runner runner = new Runner(s3Client, TARGET_BUCKET);
@Override
public Void handleRequest(S3Event s3Event, Context context) {
runner.run(s3Event, context);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我将业务逻辑移到了我的Runner
课堂上,以便可以正确地对其进行测试(遵循AWS Lambda最佳实践白皮书)。
但是,我正在努力查看如何通过伪造品S3Event
来测试我的run
功能。
我目前的测试是:
@Test
public void putsDataIntoS3() throws IOException {
runner.run(new ObjectMapper().readValue(loadJsonFromFile("s3-event.json"), S3Event.class), context);
assertTrue(true);
}
Run Code Online (Sandbox Code Playgroud)
在哪里loadJsonFromFile
获取带有我传递的文件名的资源,将其转换为输入流,然后转换为String
。
但是,这会导致错误:
com.fasterxml.jackson.databind.JsonMappingException: …
Run Code Online (Sandbox Code Playgroud) python ×4
java ×3
kotlin ×3
javascript ×2
librosa ×2
abstract ×1
arrow-kt ×1
audio ×1
aws-lambda ×1
class ×1
flask ×1
google-oauth ×1
html ×1
html5 ×1
nmf ×1
scikit-learn ×1
utf-8 ×1