バイナリファイルをbase64に変換しました
1 parent 3a8fdfb commit 4a8fa3c233acad5fb0fccf535eaf920dcf56f089
shindominato authored on 14 Jul 2020
Showing 4 changed files
View
2
■■■
.idea/misc.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
View
79
app/src/main/java/org/ntlab/amaryllis/client/VoiceActivity.java
package org.ntlab.amaryllis.client;
 
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
 
 
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Build;
import android.os.Bundle;
 
import android.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.os.Environment;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
 
import org.ntlab.amaryllis.client.entities.Voicememo;
import org.ntlab.amaryllis.client.resources.AccountsRest;
 
import java.io.File;
 
import java.io.*;
import android.media.*;
import java.io.FileInputStream;//
 
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import android.util.Base64;
 
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
 
 
public class VoiceActivity extends AppCompatActivity {
 
private MediaRecorder mr;
private MediaPlayer mp;
static final String filePath = Environment.getExternalStorageDirectory() + "/app/res/raw";
// static final String filePath = Environment.getExternalStorageDirectory() + "/app/res/raw";
private int totalTime;
private SeekBar positionBar;
private TextView elapsedTimeLabel;
private TextView remainingTimeLabel;
private int StartChange = 1;
File file;
 
byte[] buff;
String moji;
 
private byte[] byteData = new byte[4096];
private short[] shortData = new short[2048];
private int bufSize;
 
private FileInputStream in; // ファイル読み込み用
 
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_maps);
 
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/amaryllis/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
final AccountsRest signUpService = retrofit.create(AccountsRest.class);
Amaryllis amaryllis =(Amaryllis) getApplication();
String uid = amaryllis.getUid();
String passWord = amaryllis.getPassword();
 
//setContentView(R.layout.activity_voice);
file = new File(getFilesDir(),"Sample.3gp");
mp = new MediaPlayer();
 
//textView1.setText("Playback Start!");
startPlay();
}
});
 
// String enc = Base64.encodeToString(file, 0, file.length, Base64.VoicememosRest);
//byte[]a = Base64.getEncoder().encode(moji.getBytes(charset));
 
 
}
 
 
//再生開始&再生中止
}else {
try {
TextView textView1 = (TextView)findViewById(R.id.Notice);
textView1.setText("Record Start!");
in = new FileInputStream(file);
mr = new MediaRecorder();
mr.setAudioSource(MediaRecorder.AudioSource.MIC);
mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
 
mr.setOutputFile(file.getAbsolutePath());
//mr.setOutputFile(filePath);
 
in.read(byteData);
byte2short(shortData, byteData);
Base64.encodeToString(byteData, 0,byteData.length, Base64.DEFAULT);
 
mr.prepare();
mr.start();
StartChange = 0;
e.printStackTrace();
}
}
}
 
 
 
 
 
 
 
 
//}catch(Exception e){
//e.printStackTrace();
//}
//}
 
 
void byte2short(short data[], byte bdata[]){
int i;
for(i = 0; i < bdata.length / 2; i++){
// リトルエンディアン
data[i] = (short) ((short) bdata[2 * i] + (short) bdata[2 * i + 1] * 256);
}
}
 
}
View
163
app/src/main/java/org/ntlab/amaryllis/client/entities/Voicememo.java 0 → 100644
package org.ntlab.amaryllis.client.entities;
 
import com.fasterxml.jackson.annotation.JsonIgnore;
 
import org.w3c.dom.Comment;
 
import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.HashMap;
import java.util.UUID;
 
public class Voicememo {
private String vid;
private String uid;
private Calendar upload;
private Integer time;
private String data;
private double latitude;
private double longitude;
private String title;
private String summary;
private Integer times;
@JsonIgnore
private ArrayList<String> favolist;
private Integer favos;
private ArrayList<String> categories;
private HashMap<String, Comment> commentMap = new HashMap<>();
public Voicememo(String vid, String uid, Integer time, String url, double latitude, double longitude, String title, String summary) {
Calendar upload = Calendar.getInstance();
setVid(vid);
setUid(uid);
setUpload(upload);
setTime(time);
setData(url);
setLatitude(latitude);
setLongitude(longitude);
setTitle(title);
setSummary(summary);
this.times = 0;
this.favos = 0;
}
 
 
 
 
public String getVid() {
return vid;
}
private void setVid(String vid) {
this.vid = vid;
}
private String getUid() {
return uid;
}
private void setUid(String uid) {
this.uid = uid;
}
public Calendar getUpload() {
return upload;
}
private void setUpload(Calendar upload) {
this.upload = upload;
}
public Integer getTime() {
return time;
}
private void setTime(Integer time) {
this.time = time;
}
public String getData() {
return data;
}
private void setData(String url) {
this.data = url;
}
public double getLatitude() {
return latitude;
}
private void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
private void setLongitude(double longitude) {
this.longitude = longitude;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public Integer getTimes() {
return times;
}
public void addTimes() {//?どのタイミングで加算するか
times++;
}
public ArrayList<String> getFavolist(){ return favolist; }
public boolean checkFavo(String uid){
for (String a : favolist) {
if (a.equals(vid)) {
return true;
}
}
return false;
}
public void addFavolist(String uid){
if(checkFavo(uid)){
return;
}
favolist.add(uid);
setFavos();
}
public void removeFavolist(String uid) {
favolist.remove(uid);
setFavos();
}
public Integer getFavos(){ return favos; }
private void setFavos(){
favos = favolist.size();
}
public ArrayList<String> getCategory(){ return categories; }
public void addCategory(String categoryId){
for (String a : categories) {
if (a.equals(categoryId)) {
return;
}
}
categories.add(categoryId);
}
public void removeCategory(String CategoryId) {
categories.remove(CategoryId);
}
public Collection<Comment> getComments() {
return commentMap.values();
}
public Comment getComment(String commentId) {
return commentMap.get(commentId);
}
// public Comment createComment(String uid, String text) {
// if (uid == null || text == null) {
// return null;
// }
// String commentId = UUID.randomUUID().toString();
// Comment newComment = new Comment(commentId, uid, text);
// commentMap.put(commentId,newComment);
// return newComment;
// }
public void removeComment(String commentId) {
commentMap.remove(commentId);
}
}
View
46
app/src/main/java/org/ntlab/amaryllis/client/resources/VoicememosRest.java
package org.ntlab.amaryllis.client.resources;
 
 
import org.ntlab.amaryllis.client.entities.Account;
import org.ntlab.amaryllis.client.entities.AccountDeleteResponse;
 
import java.util.ArrayList;
import org.ntlab.amaryllis.client.entities.Voicememo;
 
import retrofit2.Call;
import retrofit2.http.DELETE;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Field;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
 
public interface VoicememosRest {
//全てのvidを取得
//@GET("voicememos")
//Call<ArrayList<Voicememos>> getVoicememos();
// @GET("voicememos")
// Call<ArrayList<Voicememos>> getVoicememos();
 
//ボイスメモを追加します。
//@FormUrlEncoded
//@POST("voicememos")
//Call<VoicememosJson> PostVoicememos(
//@Field("uid") String uid,
//@Field("time") String time,
//@Field("data") String data,
//@Field("category") String category,
//@Field("location") String location,
//@Field("title") String title,
//@Field("summary") String summary
//);
@FormUrlEncoded
@POST("voicememos")
Call<Voicememo> postVoicememos(
@Field("uid") String uid,
@Field("token") String token,
@Field("time") String time,
@Field("data") String data,
@Field("location") String location,
@Field("title") String title,
@Field("summary") String summary
);
 
//指定された投稿の情報を取得
//@GET("voicememos/{vid}")
//Call<VoicememosDetailResponse> VoicememosDetail(
//Call<VoicememosDetailResponse> voicememosDetail(
//@Path("vid") String vid
//);
 
//ボイスメモの削除
//@DELETE("voicemomos/{vid}")
//Call<VoicemomosDeleteResponse> VoicememosDelete(
//Call<VoicemomosDeleteResponse> voicememosDelete(
//@Path("vid") String vid
//);
 
//編集に必要な情報を取得
//@GET("voicememos/{vid}/edit")
//Call<VoicememosEditResponse> VoicememosEdit(
//Call<VoicememosEditResponse> voicememosEdit(
//@Path("vid") String vid
//);
 
//投稿の修正
//@PUT("voicememos/{vid}/edit")
//Call<VoicememosEditFix> VoicememosEditFix(
//Call<VoicememosEditFix> voicememosEditFix(
//@Path("vid") String vid,
//@Field("new_category") String new_category,
//@Field("new_title") String new_title,
//@Field("new_summary") String new_summary